Tap.java 类
package jingziqi;
import java.util.Scanner;
public class Tap {
// private static int wushaoqi;
private static int i;
private static int j;
private static int lock_1=0;
private static int lock_2=0;
private static int count=0;
public static int size = 3;
public static int pass = 0;
private static int zi_1 = 4;
shuzu tip=new shuzu(3);
public Tap(){
tip.creatNumber();
}
//调用成员变量,输出欢迎语句
private void printWelcom() {
// TODO Auto-generated method stub
System.out.println("欢迎来到井字棋游戏!");
}
private static int change(String number) {
int a = 3;
if(number.length() == 2) {
a = Integer.valueOf(number);
// System.out.println("a的值是"+a);
// System.out.println("a的值是:"+a);
}else {
System.out.println("输入坐标长度不合法!!!/n");
}
return a;
}
private static void write(int wushaoqi_1) {
// System.out.println("修改i,j的数字,wushaoqi是"+wushaoqi_1);
if(wushaoqi_1<10) {
i=0;
j=wushaoqi_1;
// System.out.println("数字小于10的时候的i="+i+",j="+j);
}else {
i = wushaoqi_1/10;
j = wushaoqi_1%10;
// System.out.println("数字大于10的时候的i="+i+",j="+j);
}
// System.out.println("和吴韶棋对应,write里面修改完的数值是i="+i+",j="+j);
}
//可视化,调用成员变量的方法
private void draw() {
tip.map_1();
}
//合法性检测
private int legal() {
int i_9 = 0;
Tap.jiancha();
// System.out.println("目标节点的zi_1传值是多少"+zi_1);
Tap.write(zi_1);
//接下来通过合法的坐标值遍历数组,来判断是否有输入重复,创建接口
// System.out.println("传入write(zi_1)修改过后的i="+i+"j="+j);
b_1:
while(true) {
//判断之前,数组不能输入坐标
if(tip.board[i*size+j]==1 | tip.board[i*size+j]==2 ) {
System.out.println("抱歉,玩家一,你所输入的坐标已有棋子了!!!/n"+"请重新输入:");
i_9 = 0;
break b_1;
}else {
i_9=2;
break b_1;
}
}
return i_9;
}
private static void jiancha() {
@SuppressWarnings("resource")
Scanner in = new Scanner(System.in);
b_2:
while(true) {
String la;
la = in.next();
//返回字符串长度
zi_1 =Tap.change(la) ;
// System.out.println("zi_1="+zi_1);
// System.out.println("i="+i+",j="+j);
if(zi_1==3) {
System.out.println("输入坐标长度不合法!!!/n请重新输入:\n");
}else {
if( ((zi_1/10)==0 |(zi_1/10) == 1 | (zi_1/10) == 2 ) & ((zi_1%10)==0 |(zi_1%10) == 1 | (zi_1%10) == 2 ) ){
break b_2;
}else{
System.out.println("输入的坐标数值越界!!!!\n请重新输入:\n");
}
}
}
}
private void assignment(int i,int j,int a) {
if(a==1) {
tip.changeNumber_1(i,j);
}else if(a == 2) {
tip.changeNumber_2(i,j);
}
}
private int win(int k) {
//如果传入的是1,则代表是玩家1调用遍历指令
int p=0;
if(k==1) {
p = tip.win_1();
}else if(k==2){
p = tip.win_2();
}else {
System.out.println("玩家错乱!");
}
return p;
}
@SuppressWarnings("unused")
public static void main(String [] args) {
//等待用户输入
Scanner in = new Scanner(System.in);
//定义方阵长度
//int size = in.nextInt();
//默认长度是3
//定义数组对象,进行相应操作
// shuzu tip = new shuzu(3);
//初始化数组
// tip.creatNumber();
//定义游戏对象,开始游戏
Tap tap=new Tap();
//输入开头语句
tap.printWelcom();
// tip.map_1();
tap.draw();
a: do {
// System.out.println("请玩家一输入坐标:(例如\"11\")\n");
// //玩家一输入并检查输入是否越界
int pass=0;
N: while(true) {
//调用判断合法性的函数
System.out.println("请玩家一输入坐标:(例如\"11\")\n");
pass = tap.legal();
// 根据返回值来判断字符是否合法,合法则跳出循环
if(pass==2) {
break N;
}
}
// tap.jiancha();
// Tap.write( zi_1);
// //接下来通过合法的坐标值遍历数组,来判断是否有输入重复,创建接口
// b:
// while(true) {
// if(tip.board[i*size+j]==1 | tip.board[i*size+j]==2 ) {
// System.out.println("抱歉,玩家一,你所输入的坐标已有棋子了!!!/n"+"请重新输入:");
// break b;
// }else {
// break N;
// }
// }
//经历以上的输入合法判断之后,进行对数组赋值
//System.out.println(tip.board[i*size+j]);
//对对象进行幅值
count++;
tap.assignment(i,j,1);
// tip.changeNumber_1(i,j);
//可视化数组(已经在数组赋值时候完成)
// tip.map_1();
// System.out.println("玩家一"+"第"+count+"次");
//检查是否赢比赛,是否可以结束
//判断输赢
lock_1 = tap.win(1);
// System.out.println("lock_1的值是:"+lock_1);
if(lock_1 == 1 ) {
System.out.println("恭喜玩家一,你赢啦!");
break a;
}else if(count==9) {
System.out.println("恭喜你们打成平局!");
break a;
}
//玩家二:
int pass_2 = 0;
M:while(true){
System.out.println("请玩家二输入坐标:(例如\"11\")\n");
pass_2 = tap.legal();
if(pass_2 == 2) {
break M;
}
}
count++;
tap.assignment(i,j,2);
//检查是否赢比赛,是否可以结束
// 玩家二传入参数,以调用成员对象的方法,来判断key值输赢
lock_2 = tap.win(2);
// System.out.println("lock_2的值是:"+lock_2);
if(lock_2 == 2) {
System.out.println("恭喜玩家二,你赢啦!");
}
}while(count<9);
System.out.println("游戏结束,未来可期!");
}
}
shuzu工具类
package jingziqi;
public class shuzu {
public int con_o = 0;
public int con_x = 0;
public int count = 0;
public int size = 3;
public int length =9 ;
private int key_1=0;
private int key_2=0;
;
// private static int hang=0;
// private static int lie=0;
public int[] board=new int[length];
public shuzu(int size){
//定义结构函数,调用成员函数构造数组
creatNumber();
// map_1();
//根据传入的参数,修改数组长度
}
//初始化数组
public void creatNumber() {
for(int n=0;n<length;n++) {
board[n]=0;
}
}
public void changeNumber_1(int i,int j) {
this.board[i*size+j] = 1;
//读入数组的时候就调用初始化方法
this.map_1();
}
public void changeNumber_2(int i,int j) {
this.board[i*size+j] = 2;
//读入数组的时候就调用初始化方法
this.map_1();
}
public int win_1() {
//检查四周,检查每行,每列,每个斜对角线
//先检查每行
con_o=0;
for(int m=0;m<size;m++) {
con_o=0;
for(int n=0;n<size;n++) {
//这里的this代表的是调用次成员函数的对象数组
if(this.board[m*size+n]==1) {
con_o++;
}
// System.out.println("1检查每行的次数"+con_o);
}
if(con_o==size) {
key_1 = 1;
}
}
//检查每列
con_o=0;
for(int m=0;m<size;m++) {
con_o=0;
for(int n=0;n<size;n++) {
//这里的this代表的是调用次成员函数的对象数组
if(this.board[n*size+m]==1) {
con_o++;
// System.out.println("1检查每列的次数"+con_o);
}
}
if(con_o==size) {
key_1 = 1;
}
}
//检查正对角线
con_o=0;
for(int m=0;m<size;m++) {
if(this.board[m*size+m]==1) {
con_o++;
}
}
if(con_o==size) {
key_1 = 1;
}
//检查副对角线
con_o=0;
for(int m=1;m<=size;m++) {
if(this.board[size*m-m]==1) {
con_o++;
}
}
if(con_o==size) {
key_1 = 1;
}
return key_1;
}
//玩家二的遍历
public int win_2() {
//检查四周,检查每行,每列,每个斜对角线
//先检查每行
con_x=0;
for(int m=0;m<size;m++) {
con_x=0;
for(int n=0;n<size;n++) {
//这里的this代表的是调用次成员函数的对象数组
if(this.board[m*size+n]==2) {
con_x++;
}
}
if(con_x==size) {
key_2 = 2;
}
}
//检查每列
con_x=0;
for(int m=0;m<size;m++) {
con_x=0;
for(int n=0;n<size;n++) {
//这里的this代表的是调用次成员函数的对象数组
if(this.board[n*size+m]==2) {
con_x++;
}
}
if(con_x==size) {
key_2 = 2;
}
}
//检查正对角线
con_x=0;
for(int m=0;m<size;m++) {
if(this.board[m*size+m]==2) {
con_x++;
}
}
if(con_x==size) {
key_2 = 2;
}
//检查副对角线
con_x=0;
for(int m=1;m<=size;m++) {
if(this.board[(size-1)*m]==2) {
con_x++;
}
}
if(con_x==size) {
key_2 = 2;
}
return key_2;
}
//可视化
// public void map() {
// //根据 0 1 2 可视化
// //先搞题头
// System.out.print("\t 0 \t 1 \t 2 \t\n\n");
// for(int i=0;i<size;i++){
// System.out.print(i+"\t ___\t___\t___\t\n\n");
// }
// }
//玩家的可视化
public void map_1() {
System.out.print("\t 0 \t 1 \t 2 \t\n\n");
System.out.print("0\t");
//定义换行的图形
int ope=0;
for(int i = 0;i<length;i++) {
if(board[i]==0) {
System.out.print("___");
ope++;
if(ope%size==0){
if(ope/size==size){
System.out.print("\n\n\n");
}else if(ope/size<size){
System.out.print("\n\n\n"+(ope/size)+"\t");
}
}else{
System.out.print("\t");
}
}else if(board[i]==1){
System.out.print("_O_");
ope++;
if(ope%size==0){
if(ope/size==size){
System.out.print("\n\n\n");
}else if(ope/size<size){
System.out.print("\n\n\n"+(ope/size)+"\t");
}
}else {
System.out.print("\t");
}
}else if(board[i]==2) {
System.out.print("_X_");
ope++;
if(ope%size==0){
if(ope/size==size){
System.out.print("\n\n\n");
}else if(ope/size<size){
System.out.print("\n\n\n"+(ope/size)+"\t");
}
}else{
System.out.print("\t");
}
}
}
}
}
后续会陆续更新,代码思路,融汇贯通.