8.9 (游戏:#字游戏)在并字游戏中,两个玩家使用各自的标志(一方用X则另一方就用O),轮流填写3x3的网格中的某个空格。当一个玩家在网格的水平方向、垂直方向或者对角线方向上出 现了三个相同的X或三个相同的O时,游戏结束,该玩家获胜。平局(没有贏家)是指当网格中所有的空格都被填满时没有任何一方的玩家获胜的情况。创建一个玩#字游戏的程序。 程序提示两个玩家可以选择X和O作为他们的标志。当输人一个标志时,程序在控制台上 重新显示棋盘,然后确定游戏的状态(是获胜、平局还是继续)。下面是一个运行示例:

以下为实现代码:

 /**        fileName:game.java
* 作用:#字游戏
* 创建日期:2019年10月10日
* 修改日期:2019年10月12日
* mail:xuangliang1@live.com
*/
import java.util.Scanner; public class game{ public static void main(String[] args){
Scanner input = new Scanner(System.in); //玩家X O
String player1 = "X";
String player2 = "O"; //棋盘数组
String[][] chess = {{" "," "," "},
{" "," "," "},
{" "," "," "}}; /** 结束标志,ture为未有输赢结果,false为已有玩家赢或者平局 */
boolean endMask = true; do {
//打印棋盘
chess = emu(chess);
//玩家1下棋
System.out.print("请玩家" + player1 + "输入横坐标(1 - 9): ");
int player1Scanner = input.nextInt(); //将玩家1下的结果输入到数组中
while(true){
if(chess[(player1Scanner - 1)/3][(player1Scanner - 1)%3] != player2){
chess[(player1Scanner - 1)/3][(player1Scanner - 1)%3] = player1;
break;
}
else{
System.out.print("请玩家" + player1 + "重新输入横坐标(1 - 9): ");
player1Scanner = input.nextInt();
}
}
//打印棋盘
chess = emu(chess); //判断玩家1游戏结果
switch (maskGameResults(chess, player1)){
case 0: break;
case 1: System.out.println("玩家 " + player1 + " 获得胜利!");
endMask = false;
break;
case -1: System.out.println("游戏平局,请重来!");
endMask = false;
break;
} //玩家2下棋
if(endMask){
System.out.print("请玩家" + player2 + "输入横坐标(1 - 9): ");
int player2Scanner = input.nextInt();
//将玩家2下的结果输入到数组中 while(true){
if(chess[(player2Scanner - 1)/3][(player2Scanner - 1)%3] != player1){
chess[(player2Scanner - 1)/3][(player2Scanner - 1)%3] = player2;
break;
}
else{
System.out.print("请玩家" + player2 + "重新输入横坐标(1 - 9): ");
player2Scanner = input.nextInt();
}
} chess = emu(chess);
switch (maskGameResults(chess, player2)){
case 0: break;
case 2: System.out.println("玩家 " + player2 + " 获得胜利!");
endMask = false;
break;
case -1: System.out.println("游戏平局,请重来!");
break;
}
}
//打印棋盘 }while(endMask); } /** 打印棋盘 */
public static String[][] emu(String [][] chess){
System.out.println(" -------------------");
for(int i = 0; i<3; i++){
for(int j = 0; j<3; j++ ){
System.out.printf(" |%3s", chess[i][j]);
}
System.out.println(" |");
System.out.println(" -------------------");
}
return chess;
} /** 判断玩家输赢 */
public static int maskGameResults(String m[][], String player){
//棋子连续数
int numberRow = 0;
if( (m[0][0]==player && m[0][1]==player && m[0][2]==player) ||
(m[1][0]==player && m[1][1]==player && m[1][2]==player) ||
(m[2][0]==player && m[2][1]==player && m[2][2]==player) ){
if(player == "X")
return 1;
else
return 2;
}
if( (m[0][0]==player && m[1][0]==player && m[2][0]==player) ||
(m[0][1]==player && m[1][1]==player && m[2][1]==player) ||
(m[0][2]==player && m[1][2]==player && m[2][2]==player) ){
if(player == "X")
return 1;
else
return 2;
}
if( (m[0][0]==player && m[1][1]==player && m[2][2]==player) ||
(m[0][2]==player && m[1][1]==player && m[2][0]==player) ){
if(player == "X")
return 1;
else
return 2;
}
for(int i = 0; i<3; i++){
for(int j = 0; j<3; j++){
if(m[j][i] == " ")
return 0;
}
}
return -1;
}
}

新手刚学java,判断输赢的算法比较死,如有更好的解决方法请评论区留言。

《Java语言程序设计》编程练习8.9(游戏:#字游戏)的更多相关文章

  1. Java语言程序设计-助教篇

    1. 给第一次上课(软件工程)的老师与助教 现代软件工程讲义 0 课程概述 给学生:看里面的第0个作业要求 2. 助教心得 美国视界(1):第一流的本科课堂该是什么样?(看里面的助教部分) 助教工作看 ...

  2. 《JAVA语言程序设计》上课笔记

    教学目标:1.使学生了解JAVA课程的性质.定位.作用:为什么要学习JAVA?让学生知道如何学好JAVA: 教学内容: 一.        问几个问题 1.             你们到这里来干什么 ...

  3. 0031 Java学习笔记-梁勇著《Java语言程序设计-基础篇 第十版》英语单词

    第01章 计算机.程序和Java概述 CPU(Central Processing Unit) * 中央处理器 Control Unit * 控制单元 arithmetic/logic unit /ə ...

  4. Java语言程序设计复习提纲

     这是我在准备Java考试时整理的提纲,如果是通过搜索引擎搜索到这篇博客的师弟师妹,建议还是先参照PPT和课本,这个大纲也不是很准确,自己总结会更有收获,多去理解含义,不要死记硬背,否则遇到概念辨析题 ...

  5. Java语言程序设计(基础篇)第一章

    第一章 计算机.程序和Java概述 1.1 引言 什么是程序设计呢? 程序设计就是创建(或者开发)软件,软件也称为程序. 1.2 什么是计算机 计算机是存储和处理数据的电子设备,计算机包括硬件(har ...

  6. 全国计算机等级考试二级笔试样卷Java语言程序设计

    一.选择题((1)-(35)每小题2分,共70分) 下列各题A).B).C).D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分. (1)下列选项中不符合良好程 ...

  7. 【C语言程序设计】—最近超火的小游戏—【数字炸弹】!

    ✍  准备工作和建议 一.程序的原理 在动手编程之前,得先跟大家说一下这个程序是干什么的. 我们可以称呼这个游戏为<数字炸弹>. 游戏的原理是这样: 每一轮电脑从 1 到 100 中随机抽 ...

  8. java语言程序设计(一)-1

    java 语言的特点是: 强类型,制定了比较多的语言规范,尽可能在编译阶段检测出更多的错误及警告. 编译和解释,首先将源代码编译成codebyte,运行时,java的运行系统装载和链接需要执行的类,并 ...

  9. JAVA语言程序设计课程评价

    紧张的又短暂的一个学期结束了,这个学期也许将成为我人生中一个重要的转折点,作为一名半路出家的选手,在初次了解Java语言时我感到非常的迷茫与不知所措.因为之前很多同学都是通过假期时间在家自学,刚转入新 ...

随机推荐

  1. UVALive - 6667 Longest Chain CDQ3维问题

    题意:现在有一个点堆, 一开始先给你m个点,然后再用题目中的rand函数生成剩下的n个点,问在这个点堆中可以找到的最长严格递增序列的长度是多少. 题解: 很常见的一个3维CDQ. 先按照z轴 sort ...

  2. CF - 1110F Nearest Leaf

    题目传送门 题解: 先用题目给定的dfs方式得到dfs序,记录下出入的dfs序. 很明显可以得知的是,以u为根的子树的dfs序在 in[u] - out[u] 的范围之内. 将每个询问先全部存到对应的 ...

  3. shell 的while语句

    转 http://blog.chinaunix.net/uid-25880122-id-2901409.html while循环的格式   while expression do command co ...

  4. 编码神器Lombok,学会后开发效率至少提高一倍!

    Lombok会利用注解自动生成javaBean中的getter.setter.equals.toString等一系列方法,大大提供开发效率,本文详细介绍下Lombok的安装及使用. 本文目录 一.Lo ...

  5. Java开发必备工具 ------------工欲善其事,必先利其器

    java企业级开发基本工具 一.开发必备工具 1.Java开发环境 JDK (官网下载即可,需要注册账户) JRE 2.Java企业编码开发工具 IntelliJ IDEA(建议使用Idea,插件使用 ...

  6. 5.cookie每个参数的意义和作用以及工作原理?

    cookie主要参数有: (1)expires 过期时间 (2)path cookie存放路径 (3)domain 域名 同域名下可访问 (4)Set-Cookie: name cookie名称

  7. 分享一个 pycharm 专业版的永久使用方法

    刚开始接触Python,首先要解决的就是Python开发环境的搭建. 目前比较好用的Python开发工具是PyCharm,他有社区办和专业版两个版本,但是社区版支持有限,我们既然想好好学python, ...

  8. Mahout介绍、安装与应用案例

        搭建环境 部署节点操作系统为CentOS,防火墙和SElinux禁用,创建了一个shiyanlou用户并在系统根目录下创建/app目录,用于存放 Hadoop等组件运行包.因为该目录用于安装h ...

  9. springboot logback日志的使用

    以下有两个使用,一个是简单使用,另一个是需要进行详细的配置再使用.首先给出源代码.可以直接使用 import org.slf4j.Logger;import org.slf4j.LoggerFacto ...

  10. Javaweb设置session过期时间

    在Java Web开发中,Session为我们提供了很多方便,Session是由浏览器和服务器之间维护的.Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠时 ...