《Java语言程序设计》编程练习8.9(游戏:#字游戏)
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(游戏:#字游戏)的更多相关文章
- Java语言程序设计-助教篇
1. 给第一次上课(软件工程)的老师与助教 现代软件工程讲义 0 课程概述 给学生:看里面的第0个作业要求 2. 助教心得 美国视界(1):第一流的本科课堂该是什么样?(看里面的助教部分) 助教工作看 ...
- 《JAVA语言程序设计》上课笔记
教学目标:1.使学生了解JAVA课程的性质.定位.作用:为什么要学习JAVA?让学生知道如何学好JAVA: 教学内容: 一. 问几个问题 1. 你们到这里来干什么 ...
- 0031 Java学习笔记-梁勇著《Java语言程序设计-基础篇 第十版》英语单词
第01章 计算机.程序和Java概述 CPU(Central Processing Unit) * 中央处理器 Control Unit * 控制单元 arithmetic/logic unit /ə ...
- Java语言程序设计复习提纲
这是我在准备Java考试时整理的提纲,如果是通过搜索引擎搜索到这篇博客的师弟师妹,建议还是先参照PPT和课本,这个大纲也不是很准确,自己总结会更有收获,多去理解含义,不要死记硬背,否则遇到概念辨析题 ...
- Java语言程序设计(基础篇)第一章
第一章 计算机.程序和Java概述 1.1 引言 什么是程序设计呢? 程序设计就是创建(或者开发)软件,软件也称为程序. 1.2 什么是计算机 计算机是存储和处理数据的电子设备,计算机包括硬件(har ...
- 全国计算机等级考试二级笔试样卷Java语言程序设计
一.选择题((1)-(35)每小题2分,共70分) 下列各题A).B).C).D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分. (1)下列选项中不符合良好程 ...
- 【C语言程序设计】—最近超火的小游戏—【数字炸弹】!
✍ 准备工作和建议 一.程序的原理 在动手编程之前,得先跟大家说一下这个程序是干什么的. 我们可以称呼这个游戏为<数字炸弹>. 游戏的原理是这样: 每一轮电脑从 1 到 100 中随机抽 ...
- java语言程序设计(一)-1
java 语言的特点是: 强类型,制定了比较多的语言规范,尽可能在编译阶段检测出更多的错误及警告. 编译和解释,首先将源代码编译成codebyte,运行时,java的运行系统装载和链接需要执行的类,并 ...
- JAVA语言程序设计课程评价
紧张的又短暂的一个学期结束了,这个学期也许将成为我人生中一个重要的转折点,作为一名半路出家的选手,在初次了解Java语言时我感到非常的迷茫与不知所措.因为之前很多同学都是通过假期时间在家自学,刚转入新 ...
随机推荐
- Cocos2d-x 学习笔记(24) ParticleSystem ParticleSystemQuad
1. ParticleSystem ParticleData是存储粒子数据的类,ParticleSystem会关联一个ParticleData对象. ParticleSystem直接继承了Node.T ...
- extends 关键字
来源于百度: 在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. 例子1:public class Clie ...
- 章节十六、6-xml参数化and并行case
一.读取xml文件中参数 1.案例演示--->创建一个需要读取数据的类 package testclasses; import org.testng.annotations.Test; impo ...
- Vue源码中compiler部分逻辑梳理(内有彩蛋)
目录 一. 简述 二. 编译流程 三. 彩蛋环节 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目录 ...
- NetCore下的HTTP请求IHttpClientFactory
使用方式 IHttpClientFactory有四种模式: 基本用法 命名客户端 类型化客户端 生成的客户端 基本用法 在 Startup.ConfigureServices 方法中,通过在 ISer ...
- js数组增删元素
操作数组的方法 push() 结尾添加 数组.push(元素) 参数 描述 newelement1 必需.要添加到数组的第一个元素. newelement2 可选.要添加到数组的第二个元素. newe ...
- 聊聊 Python 的单元测试框架(二):nose 和它的继任者 nose2
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- Google 官方 侧滑 drawerlayout
一.概述 目前侧滑框架已经很多了,但是我常用的也就那么2个 ,slidingmenu 和sidemenu-android, 但是项目要求使用官方的,所以就看了一下drawerlayout 二.代码 官 ...
- JVM参数配置及详解 -Xms -Xmx -Xmn -Xss 调优总结
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制.32位系统 下,一般限制在1.5G~2G;64为操 ...
- Mysql - 高可用方案之MHA
一.概述 本文将介绍mysql的MHA(Master High Availability)方案,官方文档地址:https://github.com/yoshinorim/mha4mysql-manag ...