Hallo
Ich bin noch Anfänger also bitte nicht lachen oder beleidigen.
Heute habe ich mal versucht ein TicTacToe Spiel zu schreiben.
Da ich leider keinen Lehrer habe mit dem ich mich darüber unterhalten kann, wollte
ich euch mal fragen:
Wie findet ihr es ?
Was sollte ich anders machen ?
Worauf sollte ich unbedingt achten ?
Sind da zuviele For-Schleifen ?
Kleine Fehler habe ich gefunden aber wollte es euch einfach mal so zeigen.
Main.java
Ich bin noch Anfänger also bitte nicht lachen oder beleidigen.
Heute habe ich mal versucht ein TicTacToe Spiel zu schreiben.
Da ich leider keinen Lehrer habe mit dem ich mich darüber unterhalten kann, wollte
ich euch mal fragen:
Wie findet ihr es ?
Was sollte ich anders machen ?
Worauf sollte ich unbedingt achten ?
Sind da zuviele For-Schleifen ?
Kleine Fehler habe ich gefunden aber wollte es euch einfach mal so zeigen.
Main.java
Java:
package at.rmr.main;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Main extends JFrame implements ActionListener {
private Container cp;
private JPanel btnPanel = new JPanel(new FlowLayout());
private JButton start = new JButton("New Game");
private JButton restart = new JButton("Reset");
private JButton exit = new JButton("Exit");
private JPanel gamePanel = new JPanel(new GridLayout(3, 3));
private JButton[] cellBtn;
private JPanel gameState = new JPanel(new FlowLayout());
private JLabel stateLabel = new JLabel("");
private boolean started;
private char playSym;
private char cpuSym;
private boolean playerMove;
private int numMoves;
public Main(){
GUI_Builder();
}
public static void main(String[] args) {
new Main();
}
public void GUI_Builder(){
btnPanel.add(start);
start.setPreferredSize(new Dimension(140,45));
start.addActionListener(this);
btnPanel.add(restart);
restart.setPreferredSize(new Dimension(140,45));
restart.addActionListener(this);
btnPanel.add(exit);
exit.setPreferredSize(new Dimension(140,45));
exit.addActionListener(this);
btnPanel.setPreferredSize(new Dimension(150,55));
gameState.add(stateLabel);
cellBtn = new JButton[9];
for(int i = 0;i < 9;i++){
cellBtn[i] = new JButton("-");
cellBtn[i].setPreferredSize(new Dimension(150,150));
cellBtn[i].addActionListener(this);
cellBtn[i].setEnabled(false);
gamePanel.add(cellBtn[i]);
}
cp = getContentPane();
cp.add(btnPanel,BorderLayout.SOUTH);
cp.add(gamePanel,BorderLayout.CENTER);
cp.add(gameState,BorderLayout.NORTH);
pack();
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
requestFocus();
}
public void start(){
int selPlay = JOptionPane.showOptionDialog(null, "Select player:","Start new Game",
JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE, null,
new String[]{"X","0"},null);
if(selPlay != -1){
if(selPlay == 0){initStart('X','0');}//X
else if(selPlay == 1){initStart('0','X');}//0
}
}
public void reset(){
for(int i = 0;i < 9;i++){
cellBtn[i].setEnabled(false);
cellBtn[i].setText("-");
cellBtn[i].setBackground(null);
started = false;
numMoves = 0;
stateLabel.setText("");
}
}
public void initStart(char p,char c){
started = true;playSym = p;cpuSym = c;numMoves = 0;
for(int i = 0;i < 9;i++){cellBtn[i].setEnabled(true);cellBtn[i].setText("");cellBtn[i].setBackground(null);}
if(p == 'X'){playerMove = true;}
else{playerMove = false;cpuPlayer();}
updateLabel();
}
public void actionPerformed(ActionEvent e) {
Object currBtn = e.getSource();
if(currBtn == start){start();}
else if(currBtn == restart){reset();}
else if(currBtn == exit){System.exit(EXIT_ON_CLOSE);}
else{if(started){manPlayer(currBtn);}}
requestFocus();
}
public void manPlayer(Object e){
for(int i = 0;i < 9;i++){
if(e == cellBtn[i]){
cellBtn[i].setText(String.valueOf(playSym));
cellBtn[i].setEnabled(false);
playerMove = false;
numMoves++;
cpuPlayer();
}
}
checkWin();
}
public void cpuPlayer(){
// very very stupid cpu ;-)
if(!playerMove && started){
Random r = new Random();
int R = r.nextInt(9);
if(cellBtn[R].isEnabled()){
cellBtn[R].setText(String.valueOf(cpuSym));
cellBtn[R].setEnabled(false);
playerMove = true;
numMoves++;
}else{
if(numMoves < 9){
cpuPlayer();
}
}
}
checkWin();
}
public void updateLabel(){
String tx = "Current Player: " + String.valueOf(playSym) + " Turn: " + numMoves;
stateLabel.setText(tx);
}
public void checkWin(){
//0 1 2
//3 4 5
//6 7 8
// hori
updateLabel();
if(cellBtn[0].getText() != "" && cellBtn[0].getText().equals(cellBtn[1].getText()) && cellBtn[1].getText().equals(cellBtn[2].getText())){
isWin(0,1,2);
}
else if(cellBtn[3].getText() != "" && cellBtn[3].getText().equals(cellBtn[4].getText()) && cellBtn[4].getText().equals(cellBtn[5].getText())){
isWin(3,4,5);
}
else if(cellBtn[6].getText() != "" && cellBtn[6].getText().equals(cellBtn[7].getText()) && cellBtn[7].getText().equals(cellBtn[8].getText())){
isWin(6,7,8);
}
// vert
else if(cellBtn[0].getText() != "" && cellBtn[0].getText().equals(cellBtn[3].getText()) && cellBtn[3].getText().equals(cellBtn[6].getText())){
isWin(0,3,6);
}
else if(cellBtn[1].getText() != "" && cellBtn[1].getText().equals(cellBtn[4].getText()) && cellBtn[4].getText().equals(cellBtn[7].getText())){
isWin(1,4,7);
}
else if(cellBtn[2].getText() != "" && cellBtn[2].getText().equals(cellBtn[5].getText()) && cellBtn[5].getText().equals(cellBtn[8].getText())){
isWin(2,5,8);
}
// cro
else if(cellBtn[0].getText() != "" && cellBtn[0].getText().equals(cellBtn[4].getText()) && cellBtn[4].getText().equals(cellBtn[8].getText())){
isWin(0,4,8);
}
else if(cellBtn[2].getText() != "" && cellBtn[2].getText().equals(cellBtn[4].getText()) && cellBtn[4].getText().equals(cellBtn[6].getText())){
isWin(2,4,6);
}
else{
if(numMoves == 9){
started = false;
numMoves = 0;
for(int i = 0;i < 9;i++){
cellBtn[i].setBackground(Color.RED);
}
}
}
}
public void isWin(int a,int b,int c){
for(int i = 0;i < 9;i++){
cellBtn[i].setBackground(Color.RED);
}
cellBtn[a].setBackground(Color.GREEN);
cellBtn[b].setBackground(Color.GREEN);
cellBtn[c].setBackground(Color.GREEN);
stateLabel.setText("Player " + cellBtn[a].getText() + " won! ;-)");
started = false;
numMoves = 0;
}
}