Hallo! Es ist eine Privatsache, aber ich bin ab April nach Tokio gezogen und ein neues Mitglied der Gesellschaft geworden. Wir sind gerade mitten im Training. (Das Training dauert 3 Monate.) In der Schulung sollen alle Ingenieure Java lernen. Objektorientiertes Denken ist in jeder Programmiersprache wichtig. Java ist eine Sprache, die mit Blick auf die Objektorientierung entwickelt wurde, und ich denke, es ist eine gute Sprache, die man zuerst lernen muss. Auf die gleiche Weise funktioniert es auch unter Mac, Windows und Linux, sodass es ohne Abhängigkeit vom Computer weit verbreitet verwendet werden kann. Obwohl ich Arrays für Schleifen, Methoden und Objektorientierung studiert habe, Ist es für viele Menschen nicht schwierig, eine Vorstellung davon zu bekommen, wie diese tatsächlich bei Software zusammenarbeiten? Daher möchte ich dieses Mal eine Othello-Anwendung erstellen, die auf CLI ausgeführt wird, und das erlernte Wissen in die Praxis umsetzen. Ich denke, der effizienteste Weg, Programmieren zu studieren, besteht darin, "eine Anwendung mit Ihrer eigenen Kraft zu erstellen und zu veröffentlichen". Kommen wir nun zum Hauptthema!
Hello, Othello Hast du jemals Othello gemacht? Es gibt weiße und schwarze Rahmen, und wenn Sie den Rahmen des Gegners einklemmen, ändert sich die Farbe Ihres eigenen Rahmens. Letztendlich gewinnt derjenige mit den meisten Stücken Ihrer eigenen Farbe. Ist es nicht angebracht, die Klassen beim Erstellen einer Othello-Anwendung wie folgt zu unterteilen? Eine Rahmenklasse, die den Status Weiß oder Schwarz, die Position des Rahmens usw. enthält. Feldklasse, die das Umdrehen eines Rahmens beurteilt Spielklasse, die das gesamte Spiel steuert Um ein Gefühl für die Atmosphäre zu bekommen, platzieren wir zuerst einen Rahmen auf der Tafel und zeigen ihn an!
Informationen zu jedem Frame von Othello werden in der Frame-Klasse verarbeitet. Der Status des Frames (weiß, schwarz, leer) wird von der Statusvariablen vom Typ String verwaltet. Hier ist Schwarz B, Weiß ist W und Himmel ist E. Implementieren Sie die setState () -Methode, um den Status zu ändern, und die getPosition () -Methode, um die Position abzurufen.
Koma.java
public class Koma{
private String state; //Die Farbe von Othello ist schwarz ... B, weiß ... W, Himmel ... E.
private int x;
private int y;
public Koma(int x,int y){
this.state = "E";
this.x = x;
this.y = y;
}
public String getState(){
return this.state;
}
public void setState(String state){
this.state = state;
}
public int[] getPosition(){
int[]pos = {this.x, this.y};
return pos;
}
}
In der Feldklasse können Sie Teile auf das Brett legen und umdrehen. Die prepare () -Methode, die alle Frames auf der Karte im Status E initialisiert, Implementieren Sie die feature () -Methode, die die Situation auf der Karte visualisiert und an die Befehlszeile ausgibt.
Field.java
import java.util.ArrayList;
import java.util.List;
public class Field{
private List<Koma> komalist;
private int ynum = 0;
private int xnum = 0;
public Field(int xnum, int ynum){
this.xnum = xnum;
this.ynum = ynum;
}
public void prepare(){
this.komalist = new ArrayList<>();
for(int y=0;y<this.ynum;y++){
for(int x=0;x<this.xnum;x++){
Koma koma = new Koma(x,y);
this.komalist.add(koma);
}
}
}
public Koma getKoma(int y, int x){
for(Koma koma : this.komalist){
int[]pos = koma.getPosition();
if(pos[0]==y && pos[1]==x){
return koma;
}
}
return null;
}
public void putKoma(int x, int y, String state){
Koma koma = this.getKoma(x,y);
koma.setState(state);
}
public void feature(){
String [][] board = new String[ynum][xnum];
for(Koma koma : this.komalist){
int[] pos = koma.getPosition();
String state = koma.getState();
board[pos[1]][pos[0]] = state;
}
System.out.println("\n\t0\t1\t2\t3\t4\t5\n");
for(int y=0;y<board.length;y++){
System.out.print(y+"\t");
for(int x=0;x<board[0].length;x++){
String b = board[y][x];
System.out.print(b+"\t");
}
System.out.println("\n");
}
}
}
Rufen Sie die Feldklasse auf und versuchen Sie, einen schwarzen Rahmen an die Position von x = 2, y = 2 zu setzen.
Game.java
public class Game{
public static void main(String[] args){
Field field = new Field(6,6);
field.prepare();
field.putKoma(2,2,"B");
field.feature();
}
}
$ javac Game.java
$ java Game
Kompilieren Sie ein Java-Programm und führen Sie es aus.
Die Position von x = 2, y = 2 ist B und die anderen Stellen sind E!
Als nächstes fügen wir einen Prozess hinzu, um den Rahmen des Gegners beim Platzieren des Rahmens umzudrehen. Stellen wir uns Othello konkret vor. (Zur Erklärung wird eine einfache Situation von 4✕4 angenommen)
Was passiert in der in der Abbildung gezeigten Situation, wenn Sie B-1 mit einem weißen Rahmen versehen? So einfach ist das! Alle dazwischen liegenden schwarzen Rahmen werden in weiße Rahmen umgewandelt. Die schwarzen Rahmen auf B-2 und B-3 ändern sich in weiße Rahmen.
Aber was ist mit diesem Fall? Diesmal gibt es viele Orte, an denen man umkehren kann! Dank des weißen Rahmens in D-1 ist der schwarze Rahmen in C-1 invertiert. Dank des weißen Rahmens bei D-3 wird der schwarze Rahmen bei C-2 umgedreht. Dank der weißen Rahmen in B-4 sind die schwarzen Rahmen in B-2 und B-3 umgekehrt.
Lassen Sie uns dies nun in den Algorithmus einfügen. Es scheint ein wenig kompliziert. Wie Sie den beiden obigen Beispielen entnehmen können, gibt es allgemeine Regeln für das Umdrehen von Teilen. Das heißt, in einer bestimmten Richtung schließen der weiße Rahmen und der weiße Rahmen den schwarzen Rahmen ein. Es gibt acht Richtungen (Nord, Nordost, Ost, Südost, Süd, Südwest, West, Nordwest) auf der Tafel, daher muss die Beurteilungsverarbeitung für alle Richtungen durchgeführt werden. Die Tatsache, dass der weiße Rahmen und der weiße Rahmen den schwarzen Rahmen einschließen, ist etwas schlampig. Wenn Sie etwas mehr kauen, damit es im Programmablauf beschrieben werden kann, ist dies wie folgt. Wenn der Rahmen, den Sie platzieren möchten, ein weißer Rahmen ist
Betrachten wir das vorherige Beispiel. Wenn Sie die Rahmenliste in 8 Richtungen (Nord, Nordost, Ost, Südost, Süd, Südwest, West, Nordwest) von der Position von B-1 erhalten, ist sie wie folgt.
Richtung | Rahmenliste |
---|---|
Norden | - |
Nordost | - |
Osten | schwarz-Weiß |
Süd-Ost | schwarz-Weiß |
Süden | schwarz-schwarz-Weiß |
Südwesten | schwarz |
Westen | Weiß |
Nordwest | - |
Da die als nächstes zu platzierende Rahmenfarbe Weiß ist, erfolgt das Umdrehen in den drei Richtungen Ost, Südost und Süd.
Es wäre interessant, wenn wir Netzwerkkommunikation herstellen und gegen Freunde spielen könnten. Es scheint ein wenig hoch zu sein, also lasst uns diesmal gegen die CPU spielen. Das Erstellen einer starken CPU ist etwas schwierig, aber eine schwache CPU kann dies sofort tun. Eine schwache CPU kann wie folgt implementiert werden.
Das ist es.
Othello hat die Regel, dass es nur dort platziert werden sollte, wo es sich umdreht (sicherlich) Wenn beispielsweise der nächste zu platzierende Frame in der im Bild unten gezeigten Situation weiß ist, Es gibt vier Stellen, die in Orange platziert werden können (A-3, B-4, C-1, D-2). Wählen Sie zufällig eine dieser vier Stellen aus und platzieren Sie den Rahmen dort Angenommen, die CPU hat einen Frame platziert.
Bisher habe ich das Othello-Programm erklärt. Ich denke, es ist wichtig, ein Programm zu schreiben und dabei den Wert der Objektorientierung zu spüren! Diesmal
Der Code ist für Menschen leicht zu lesen, indem er in drei Teile unterteilt wird. Was ist, wenn es keine Objektorientierung gibt und diese prozedural sind? Ich finde es sehr, sehr schwierig. Das Wichtigste ist, selbst zu denken, die Klasse zu entwerfen und zu codieren. Auf jeden Fall kann es Othello sein, es muss nicht Othello sein, es kann Blackjack sein, es kann ein Webserver sein. Wenn Sie also eine Programmiersprache lernen, haben Sie die Erfahrung, etwas von Grund auf neu zu erstellen. Schauen wir uns das an!