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();}}
- 3子棋
- 【C语言】3子棋游戏,
- 盖房子优化3
- 3第一个例子
- N子棋project小记
- acm 3 1002 子序列
- 习题 3-9 子序列
- 【3-3最长的回文子串】
- 子衿的搞笑事(3)
- 连载3:最长公共子序列
- 3、求子数组的最大和
- awk的3个例子(成长篇)
- 3:求子数组的最大和
- CodeSmith学习(3)运行子模版
- 【数字题3】最大重叠子区间
- 知识点小结3(子查询)
- 算法实战3:最长公共子序列
- 3求子数组的最大和
- window.print打印指定div
- VBA 操作excel菜单
- C#加密算法汇总
- 编写按层次遍历二叉树的算法
- ARM伪指令ldr&adr使用 代码重定位实现
- 3子棋
- 为什么VC中使用了双缓存显示技术,还是会出现闪屏呢?
- Windows VS2010配置OpenCV2.4.2
- 驱动模块的Makefile——ARM LINUX
- PHP 加密方式
- C工程的组织方式(头文件的功能)以及Linux下常用的头文件的作用
- HttpClient简单请求和session的保持
- C++中的空类,默认产生哪些类成员函数?
- 信息安全——RSA密码系统的实现