01-JAVA基础—>赏金任务—>五子棋(面向对象)
做个记录
方便复制粘贴
Checkerboard
Chess_player
Referee
Main
// 棋盘类
// 棋盘类
public class Checkerboard {/*** 显示棋盘* X轴 y轴 对边框进行轴叙述* 对初始棋盘* 棋局开始后接收棋手的落子* 归环境类管,受裁判监控** 显示棋子*/private int Vertical=16; //纵经private int horizontal=16; //横纬public int getVertical() {return Vertical; }public int getHorizontal() { return horizontal; }//建立五子棋双重数组public int[][] chess = new int[this.horizontal][this.Vertical];//棋盘初始化方法public void initialization(){// 对边框进行轴叙述for (int i = 0; i<16; i++){/*chess[0][i]= String.valueOf(i);chess[i][0]= String.valueOf(i);*/chess[0][i] = i;chess[i][0] = i;}//对初始棋盘进行归零处理for(int i = 1;i<16;i++) {for(int j =1;j<16;j++) {// chess[i][j]="┼";chess[i][j] = 0;}}}//棋盘呈现方法public void present(){//打印出棋盘for(int i = 0;i<16;i++) {for(int j =0;j<16;j++) {if((i==0&&j>=10)||(i>=10&&j==0)) {System.out.print(chess[i][j]+" ");}else {System.out.print(chess[i][j]+" ");}}System.out.println("");}}//获得棋盘对象中的棋盘二维数组public int[][] getChessboard(){return this.chess;}/* public static void main(String[] args) {//产生一个棋盘Checkerboard c = new Checkerboard();c.initialization();c.present();c.chess[3][3] = 2;c.present();}*/}
// 棋手类
// 棋手类
public class Chess_player {/*** 下棋* 选择非零幸运数字(1,2,3,4,5,6,7,8,9)* 悔棋 3次机会* 认输* 记住自己下的每一步*///下棋public static void press(int[][] chess,int who,int x,int y){// 1 黑 2 白if (who == 1){chess[x][y] = 1;}else {chess[x][y] = 2;}}
}
// 裁判类
import java.util.Random;// 裁判类
public class Referee {/*** 有一个棋盘* 判断先手,确定黑白* 限时指定谁下,超时犯规,对方赢* 怎么算犯规* 下棋的地方有棋子* 下棋的地方越界* 判断谁赢** 记录棋手可选择幸运数字(1,2,3,4,5,6,7,8,9)* 记录回合数(最多(15*15)/2=112个回合)*///建立校正X,Y范围是否合理的变量//裁判心里有数int x;int y;//建立黑方和白方的X,Y轴数据变量int blackYInput = 0;int blackXInput = 0;int whiteYInput = 0;int whiteXInput = 0;//猜先public int caixian(){// 1 黑先 2 白先Random r = new Random();int a = r.nextInt(100);if (a<49){return 1; }else { return 2; }}//限时棋手轮下public void time() {int time = 60;while (time > 0) {time--;try {Thread.sleep(1000);int hh = time / 60 / 60 % 60;int mm = time / 60 % 60;int ss = time % 60;System.out.println("还剩" + ss + "秒");} catch (InterruptedException e) {e.printStackTrace();}}}//犯规public boolean fangui(int [][] chess, int who, int x, int y){//判断越界if (x<1 | x>15 | y<1 | y>15){System.out.println("手别抖啊,都下出界了");return false;}//判断有子,谁的子if (chess[x][y] == 1 ){if(who == 1){System.out.println("黑哥,这里自己下过的自己不知道??");return false;}else {System.out.println("白哥,这里已经有黑子了。。。");return false;}}else if(chess[x][y] == 2){if(who == 2){System.out.println("白哥,这里自己下过的自己不知道??");return false;}else {System.out.println("黑哥,这里已经有黑子了。。。");return false;}}else {return true;}}//判赢public boolean panying(int[][] chess,int who,int x,int y){int nums =1;int a=0;String p = "";if (who==1){p = "黑子赢";a = who; } else {p = "白子赢";a =2; }//横向五个连续棋子for(int i = 1;i<16;i++) {for(int j =1;j<15;j++) {if(chess[i][j]==a&&chess[i][j+1]==a) {nums++;if(nums == 5) {System.out.println(p);return true;}}else {nums = 1;}}}nums = 1;//纵向五个连续棋子for(int j = 1;j<16;j++) {for(int i =1;i<15;i++) {if(chess[i][j]==a &&chess[i+1][j]== a ) {nums++;if(nums == 5) {System.out.println(p);return true;}}else {nums = 1;}}}nums = 1;//右上斜5个棋子for (int i = 1; i < 15; i++) {for (int j = 1; j < 16 ; j++) {judge:for(int k = 1;k<5;k++) {if((j-k)>0&&(i+k)<16) {if(chess[j][i]== a &&chess[j-k][i+k]== a ) {nums++;}else {nums=1;break judge;}}else break judge;}if(nums==5) {System.out.println(p);return true;}}}nums = 1;//左上斜五个棋子for (int i = 1; i < 15; i++) {for (int j = 1; j < 16 ; j++) {judge:for(int k = 1;k<5;k++) {if((j-k)>0&&(i-k)>0) {if(chess[j][i]== a &&chess[j-k][i-k]== a ) {nums++;}else {nums=1;break judge;}}else break judge;}if(nums==5) {System.out.println(p);return true;}}}return false;}/*public static void main(String[] args) {System.out.println(caixian());time();}*/}
Main 环境类
import java.util.Scanner;
public class Main {//自己和自己下
// private static int[][] c;public static void main(String[] args) {//产生一个棋盘Checkerboard c = new Checkerboard();//产生一个棋手 下子权限Chess_player player = new Chess_player();//产生一个裁判 棋盘所有权限Referee referee = new Referee();//游戏开始System.out.println("游戏开始!");c.initialization();c.present();
// int[][] chess = c.getChessboard();System.out.println("棋盘就位,棋手就位,裁判就位,请猜先。");int a = referee.caixian();int p1,p2 = 0;String s1,s2 = "";if (a == 1){p1 = 1;p2 = 2;s1 = "黑选手";s2 = "白选手";System.out.println("黑先。");}else {p1 = 2;p2 = 1;s1 = "白选手";s2 = "黑选手";System.out.println("白先。");}System.out.println("准备好了? 开始");//建立回合变量stepint step = 1;//建立输入变量Scanner input = new Scanner(System.in);//开始回合循环win:do {System.out.println('请' + s1 + "输入x坐标");referee.x = input.nextInt();System.out.println('请' + s1 +"输入y坐标");referee.y = input.nextInt();if (referee.fangui(c.chess,p1,referee.x, referee.y)){player.press(c.chess,p1,referee.x, referee.y);c.present();if(referee.panying(c.chess,p1,referee.x, referee.y)){System.out.println("比赛结束、、");break ;}}System.out.println('请' + s2 +"输入x坐标");referee.x = input.nextInt();System.out.println('请' + s2 +"输入y坐标");referee.y = input.nextInt();if (referee.fangui(c.chess,p2,referee.x, referee.y)){player.press(c.chess,p2,referee.x, referee.y);c.present();if(referee.panying(c.chess,p2,referee.x, referee.y)){System.out.println("比赛结束、、");break ;}}//一回合结束,step+1step++;}while(step<112);/**注:因为共有15*15=225个棋子位,一轮下来黑方和白方共下两个棋子,* 故准备(15*15)/2=112个回合。*/}
}
说明文档checkerboard 棋盘类显示棋盘X轴 y轴 对边框进行轴叙述对初始棋盘进行归零处理棋局开始后接收棋手的落子归环境类管,受裁判监控显示棋子chess_player 棋手类下棋选择非零幸运数字(1,2,3,4,5,6,7,8,9)悔棋认输记住自己下的每一步referee 裁判类判断先手,确定黑白限时指定谁下,超时犯规,对方赢怎么算犯规下棋的地方有棋子下棋的地方越界判断谁赢提供棋手可选择幸运数字(1,2,3,4,5,6,7,8,9)记录回合数(最多(15*15)/2=112个回合)Main 环境类一个棋盘一个裁判两个棋手有的地方有BUG
可以考虑加一个倒计时
没有机器人
没有智能棋盘(棋盘+裁判)
01-JAVA基础—>赏金任务—>五子棋(面向对象)相关推荐
- 01.Java基础语法
目录 01.Java基础语法 一,环境搭建 1,Java体系与特点 2,Java跨平台原理 2.1 Java虚拟机(JVM) 2.2 垃圾回收器(GC) 2.3 Java SE组成概念图 2.4 JD ...
- Java基础教程:面向对象编程[2]
Java基础教程:面向对象编程[2] 内容大纲 访问修饰符 四种访问修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. default ...
- java基础入门-02-【面向对象】
Java基础入门-02-[面向对象] 8.面向对象 8.1. 类和对象 8.1.1 类和对象的理解 8.1.2 类的定义 8.1.3 对象的使用 8.1.4 学生对象-练习 8.2. 对象内存图 8. ...
- python 面向对象_Python 和 Java 基础对比 08 —— 面向对象
一.面向对象编程(object oriented programming) 简称:OOP,是一种编程的思想. OOP把对象当成一个程序的基本单元,一个对象包含了数据和操作数据的函数. 面向对象的出现极 ...
- Java基础知识(二) 面向对象的技术
Java基础知识 面向对象的技术 1. 面向对象与面向过程有什么区别 2. 面向对象有哪些特征 3. 什么是继承 4. 组合和继承的区别 5. 多态的实现机制 6. 重载和覆盖有什么区别 7. 抽象类 ...
- Java基础系列五 面向对象程序设计
Java基础系列第一章 初识Java语言 Java基础系列第二章 Java语言基础 Java基础系列第三章 Java流程控制 Java基础系列第四章 Java数组与字符串 Java基础系列第五章 面向 ...
- Java基础篇:面向对象
文章目录 学习面向对象内容的三条主线 面向过程(POP)与面向对象(OOP) 面向对象的思想概述 Java类和对象 创建Java自定义类 对象的创建和使用 对象的创建和使用:匿名对象 类的成员之一:属 ...
- JAVA基础第二章 面向对象进阶
2.1封装与getter.setter方法 1.读写是两个操作,读即取值.访问值,写即赋值. 2.面向对象的三大特征:封装.继承.多态 (1)封装--一个程序肯定会定义很多类,那么为了保证各个类之间数 ...
- Java 基础篇之面向对象
一. 什么是面向对象 1.1 类 类指对共享相同的属性.操作方法.行为及关系的一组对象的描述,是创建对象的模板. 示例: public class Dog {//属性private String na ...
- java基础学习-(1)面向对象
目录 一. 面向过程的思想和面向对象的思想 二 .简单理解面向对象 三.面向对象的设计思想 四.对象和类的概念 五.如何抽象出一个类? 六.类(对象)之间的关系 七.Java与面向对象 八.为什么使用 ...
最新文章
- python内置函数:iter、enumerate和next
- 修改initrd做miniLinux
- Linux(centos7)安装nginx并配置代理
- js构造函数的浅薄理解
- Mac电脑mysql创建数据库步骤_mac上创建MySQL的基本步骤
- 这些让人看瞎了的设计!实力证明,数学才是世界的最终boss!
- JS原型链中的属性问题
- Catalan数总结
- 自己动手从0开始实现一个分布式RPC框架
- 使用kubeadm安装kubernetes高可用集群
- 64centos安装mysql_CentOS7 64位安装mysql教程,亲测完美
- jQuery UI 实现 仿购物车功能 简洁的js
- mod libs 课堂
- 电脑一窍不通可以学计算机吗,对电脑一窍不通,要如何学重装系统?你想学的方法在这里!...
- GoldWave的消音、淡入淡出、改变音乐速率
- ATMV1函数版v1
- 微pe工具箱具体分区教程
- 【历史上的今天】6 月 25 日:笔记本之父诞生;Windows 98 发布;通用产品代码首次商用
- 计算机网络(24)——轮转访问MAC协议
- weight_decay一般设置为多少_建盏一般多少钱?建阳建盏定价的依据是什么?宋韵建盏为你解析...