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. box-sizing(CSS3)

    CSS3新增了盒模型box-sizing,属性值有下面三个: content-box 默认值,让元素维持W3C的标准盒模型.元素的宽度/高度(width/height)= 元素内容框宽度/高度(con ...

  2. spring security jquery ajax重定向问题解决

    服务器端security增加一个配置如下: @Override protected void configure(HttpSecurity http) throws Exception { Strin ...

  3. 解决subline安装插件被墙失败的方法

    一.问题场景描述 当你完成subline和package control的安装后,准备使用install package安装各种各样的插件来丰富你的编辑器,却出现类似 “Unable to downl ...

  4. Apache JMeter (一)环境的配置和操作

    JMeter是Apache组织的开放源代码项目,是一款优秀的开源测试工具,可以做功能测试和性能测试.是每个资深的测试工程师必须掌握的测试工具,熟悉JMeter可以大大提高工作效率. 1.下载Jmete ...

  5. 并发之初章Java内存模型

    >>>>>>博客地址<<<<<< >>>>>>首发博客<<<<< ...

  6. 时钟AnalogClock和DigitalClock

    <AnalogClock android:layout_width="fill_parent" android:layout_height="fill_parent ...

  7. Python网络爬虫实战(四)模拟登录

    对于一个网站的首页来说,它可能需要你进行登录,比如知乎,同一个URL下,你登录与未登录当然在右上角个人信息那里是不一样的. (登录过) (未登录) 那么你在用爬虫爬取的时候获得的页面究竟是哪个呢? 肯 ...

  8. 各种浏览器UA值

    UA  User-Agent:用户代理,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本.CPU 类型.浏览器及版本.浏览器引擎.浏览器语言.浏览器插件等. 标准格式为: 浏览器标识 ...

  9. Java方法调用的字节码指令学习

    Java1.8环境下,我们在编写程序时会进行各种方法调用,虚拟机在执行这些调用的时候会用到不同的字节码指令,共有如下五种: invokespecial:调用私有实例方法: invokestatic:调 ...

  10. [LeetCode] 由 “中缀表达式 --> 后缀表达式" 所想

    如何利用栈解决问题. Ref: 如何在程序中将中缀表达式转换为后缀表达式? 本文的引申:如何手写语法分析器 实现调度场算法 “9+(3-1)*3+10/2” --> “9 3 1-3*+ 10 ...