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 804C Ice cream coloring

    Ice cream coloring 题解: 这个题目中最关键的一句话是, 把任意一种类型的冰激凌所在的所有节点拿下来之后,这些节点是一个连通图(树). 所以就不会存在多个set+起来之后是一个新的完 ...

  2. GitHub 简单教程

    码农朋友们都知道,GitHub是一个面向开源及私有软件项目的托管平台,上面托管了众多的优秀的项目,比如Linux内核源码.Git源码.机器学习框架Tensorflow等等.当然,除了这些顶尖项目外,还 ...

  3. Map.Entry 接口

    Map.Entry Map 接口下面的 Entry 接口. 该接口,定义一个键值对实体接口.Map.entrySet 方法返回的 Set 集合中的实体就是实现这个 它.只有一种方法可以获得 Map.E ...

  4. odoo12从零开始:三、2)odoo模型层

    前言 上一篇文章(创建你的第一个应用模块(module))已经大致描述了odoo的模型层(model)和视图层(view),这一篇文章,我们将系统地介绍有关于model的知识,其中包括: 1.模型的类 ...

  5. EasyUI总结(一)-- 入门

    一.EasyUI下载 EasyUI官方下载地址:http://www.jeasyui.com/download/index.php,目前最新的版本是:jQuery EasyUI 1.4.1

  6. SpringCloud学习笔记(5):Hystrix Dashboard可视化监控数据

    简介 上篇文章中讲了使用Hystrix实现容错,除此之外,Hystrix还提供了近乎实时的监控.本文将介绍如何进行服务监控以及使用Hystrix Dashboard来让监控数据图形化. 项目介绍 sc ...

  7. JAVA学习笔记—review基本知识[反射与异常]

    JAVA学习笔记—review基本知识[反射与异常] 1.异常: 1.1异常的分类: Java会将所有的异常封装成对象,其根本父类为Throwable. Throwable有两个子类:Error 和E ...

  8. Elastic Stack 笔记(六)Elasticsearch5.6 搜索详解

    博客地址:http://www.moonxy.com 一.前言 Elasticsearch 主要包含索引过程和搜索过程. 索引过程:一条文档被索引到 Elasticsearch 之后,默认情况下 ES ...

  9. 31 (OC)* 内存管理

    31 (OC)  内存管理 一:内存管理黄金法则. 如果对一个对象使用了alloc.[Mutable]copy,retain,那么你必须使用相应的realease或者autorelease 二:内存管 ...

  10. Spring Cloud 系列之 Spring Cloud Stream

    Spring Cloud Stream 是消息中间件组件,它集成了 kafka 和 rabbitmq .本篇文章以 Rabbit MQ 为消息中间件系统为基础,介绍 Spring Cloud Stre ...