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. codeforces 572 D. Minimization(dp+ 思维)

    题目链接:http://codeforces.com/contest/572/problem/D 题意:给出一个序列,可以任意调整序列的顺序,使得给出的式子的值最小 题解:显然要先排一下序,然后取相邻 ...

  2. lightoj 1044 - Palindrome Partitioning(需要优化的区间dp)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1044 题意:求给出的字符串最少能分成多少串回文串. 一般会想到用区间dp暴力3个for ...

  3. 决胜Flutter 第一章 熟悉战场

    欢迎参加“决胜Flutter” 实训课程,这里是你此次实训之旅的起点. 本章将带您快速了解移动开发的现状,然后向您介绍Flutter的发展历史以及优势特点,最后一起动手,搭建高效的开发环境. 由于Fl ...

  4. 【Redis】集群方式

    一.概述 1.1 Redis3.0版本之前 1.2 常见集群方案 二.Redis-Cluster原理 三.搭建集群方案 3.1 准备工作 3.2 创建模拟集群的文件夹 3.3 复制脚本 3.4 复制一 ...

  5. 利用github搭建私人maven仓库

    一.背景 最近在做HBase的项目,不免会引用到一些工具类,如StringUtils,NumberUtils,DateUtils这些,公司底层有封装好可以直接使用. 但是项目完成,用maven打包部署 ...

  6. 实现非管理型UPS在linux主机上的停电自动关机

    买了个山特的SANTAK TG-BOX 850 UPS,自带USB通讯线缆.本以为官方软件提供Linux下的CLI命令以监控UPS状态. 官网提供的下载链接巨慢无比不说,CLI下只提供了安装脚本,没有 ...

  7. 安装MariaDB

    1.安装MariaDB安装命令yum -y install mariadb mariadb-server安装完成MariaDB,首先启动MariaDBsystemctl start mariadb设置 ...

  8. springcloud config配置读取优先级

    情景描述 最近在修复Eureka的静态页面加载不出的缺陷时,最终发现是远程GIT仓库将静态资源访问方式配置给禁用了(spring.resources.add-mappings=false).虽然最后直 ...

  9. [VB.NET Tips]赋值运算千万要注意

    赋值运算符是一个语句,不能在表达式中使用,表达式中的等号表示相等而不是赋值. 上示例: Dim x As Integer Dim y As Object x = 5 y = x = 5 Console ...

  10. 睡梦中被拉起来执行Spring事务

    梦中惊醒 在Tomcat的线程池里,有这样一个线程,自打出生后,从来不去干活儿,有好多次走出线程池“这座大山”去看世界的机会,都被他拱手让给了弟兄们. 弟兄们给他取了个名字叫二师兄.没错,好吃懒做,饱 ...