3子棋

来源:互联网 发布:手机打印淘宝快递单 编辑:程序博客网 时间:2024/04/29 07:19

写了个简易的3子棋,即X,O方轮流下棋,有三个棋子在一行一列或对角线即为获胜

代码写的很挫,没有体现面向对象的思想,还待改进。。。

import java.util.Scanner;class weizhi{//输入棋子的位置,用一个整数返回public int cmp(String s1){if(s1.equals("A1"))  return 0;if(s1.equals("A2"))  return 1;if(s1.equals("A3"))  return 2;if(s1.equals("B1"))  return 3;if(s1.equals("B2"))  return 4;if(s1.equals("B3"))  return 5;if(s1.equals("C1"))  return 6;if(s1.equals("C2"))  return 7;if(s1.equals("C3"))  return 8;return -1; //表示输入的字符串不符合规范}}class qipan{//将3*3的棋盘看成二维数组public char[][] a=new char [3][3];//初始化棋盘public void init(){for(int i=0;i<3;i++){for(int j=0;j<3;j++){a[i][j]=' ';}}}//打印棋盘状态public void print(){System.out.println("当前棋盘状态");for(int i=0;i<3;i++){for(int j=0;j<3;j++){System.out.print(a[i][j]);}System.out.print("\n");}}//t1表示下棋的位置,t2表示棋子public int xiaqi(int t1,char t2){int x,y;x=t1/3;y=t1%3;if(a[x][y]==' '){a[x][y]=t2;int ans=judge(x,y,t2);if(ans==1){System.out.println("X方获得胜利");return 1;}if(ans==2){System.out.println("O方获得胜利");return 2;}return 0;}else{System.out.println("该位置已有棋子,重新输入");return -1;}}//判断是否有人获胜public int judge(int x,int y,char t){//x表示该棋子所在行,y表示该棋子所在列if(a[x][0]==t&&a[x][1]==t&&a[x][2]==t) //判断该行{if(t=='X')return 1;if(t=='O')return 2;}if(a[0][y]==t&&a[1][y]==t&&a[2][y]==t) //判断该列{if(t=='X')return 1;if(t=='O')return 2;}if(a[0][0]==t&&a[1][1]==t&&a[2][2]==t) //判断对角线{if(t=='X')return 1;if(t=='O')return 2;}return -1;}}public class threechess {public static void main(String args[]){System.out.println("棋子用X,O表示");System.out.println("默认X方首先下棋");int i=1;int flag=0;int t=1;//1表示X下棋,-1表示O下棋//最多有9个位置可供下棋Scanner scanner=new Scanner(System.in);String line;weizhi w=new weizhi();qipan q=new qipan();q.init();while(i<=9){if(t==1){System.out.println("X方下棋");line=scanner.nextLine();int temp1=w.cmp(line);if(temp1==-1)System.out.println("输入的位置不符合规范,重新输入");else{int temp2=q.xiaqi(temp1,'X');if(temp2==1||temp2==2){q.print();flag=1;break;}if(temp2==0){q.print();t=-1;i++;}if(temp2==-1){//该位置已有棋子,重新输入}}}else{System.out.println("O方下棋");line=scanner.nextLine();int temp1=w.cmp(line);if(temp1==-1)System.out.println("输入的位置不符合规范");else{int temp2=q.xiaqi(temp1,'O');if(temp2==1||temp2==2){q.print();flag=1;break;}if(temp2==0){q.print();t=1;i++;}if(temp2==-1){//该位置已有棋子,重新输入}}}}if(flag==0)System.out.println("和局,未分出胜负");scanner.close();}}