《Java语言程序设计》编程练习8.9(游戏:#字游戏)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了《Java语言程序设计》编程练习8.9(游戏:#字游戏),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3702字,纯文字阅读大概需要6分钟。
内容图文
8.9 (游戏:#字游戏)在并字游戏中,两个玩家使用各自的标志(一方用X则另一方就用O),轮流填写3x3的网格中的某个空格。当一个玩家在网格的水平方向、垂直方向或者对角线方向上出 现了三个相同的X或三个相同的O时,游戏结束,该玩家获胜。平局(没有贏家)是指当网格中所有的空格都被填满时没有任何一方的玩家获胜的情况。创建一个玩#字游戏的程序。 程序提示两个玩家可以选择X和O作为他们的标志。当输人一个标志时,程序在控制台上 重新显示棋盘,然后确定游戏的状态(是获胜、平局还是继续)。下面是一个运行示例:
以下为实现代码:
1 /** fileName:game.java 2 * 作用:#字游戏 3 * 创建日期:2019年10月10日 4 * 修改日期:2019年10月12日 5 * mail:xuangliang1@live.com 6 */ 7 import java.util.Scanner; 8 9 public class game{ 10 11 public static void main(String[] args){ 12 Scanner input = new Scanner(System.in); 13 14//玩家X O 15 String player1 = "X"; 16 String player2 = "O"; 17 18//棋盘数组 19 String[][] chess = {{" "," "," "}, 20 {" "," "," "}, 21 {" "," "," "}}; 22 23/** 结束标志,ture为未有输赢结果,false为已有玩家赢或者平局 */ 24boolean endMask = true; 25 26do { 27//打印棋盘 28 chess = emu(chess); 29//玩家1下棋 30 System.out.print("请玩家" + player1 + "输入横坐标(1 - 9): "); 31int player1Scanner = input.nextInt(); 32 33//将玩家1下的结果输入到数组中 34while(true){ 35if(chess[(player1Scanner - 1)/3][(player1Scanner - 1)%3] != player2){ 36 chess[(player1Scanner - 1)/3][(player1Scanner - 1)%3] = player1; 37break; 38 } 39else{ 40 System.out.print("请玩家" + player1 + "重新输入横坐标(1 - 9): "); 41 player1Scanner = input.nextInt(); 42 } 43 } 44//打印棋盘 45 chess = emu(chess); 46 47//判断玩家1游戏结果 48switch (maskGameResults(chess, player1)){ 49case 0: break; 50case 1: System.out.println("玩家 " + player1 + " 获得胜利!"); 51 endMask = false; 52break; 53case -1: System.out.println("游戏平局,请重来!"); 54 endMask = false; 55break; 56 } 57 58//玩家2下棋 59if(endMask){ 60 System.out.print("请玩家" + player2 + "输入横坐标(1 - 9): "); 61int player2Scanner = input.nextInt(); 62//将玩家2下的结果输入到数组中 63 64while(true){ 65if(chess[(player2Scanner - 1)/3][(player2Scanner - 1)%3] != player1){ 66 chess[(player2Scanner - 1)/3][(player2Scanner - 1)%3] = player2; 67break; 68 } 69else{ 70 System.out.print("请玩家" + player2 + "重新输入横坐标(1 - 9): "); 71 player2Scanner = input.nextInt(); 72 } 73 } 74 75 chess = emu(chess); 76switch (maskGameResults(chess, player2)){ 77case 0: break; 78case 2: System.out.println("玩家 " + player2 + " 获得胜利!"); 79 endMask = false; 80break; 81case -1: System.out.println("游戏平局,请重来!"); 82break; 83 } 84 } 85//打印棋盘 86 87 }while(endMask); 88 89 } 90 91/** 打印棋盘 */ 92publicstatic String[][] emu(String [][] chess){ 93 System.out.println(" -------------------"); 94for(int i = 0; i<3; i++){ 95for(int j = 0; j<3; j++ ){ 96 System.out.printf(" |%3s", chess[i][j]); 97 } 98 System.out.println(" |"); 99 System.out.println(" -------------------"); 100 } 101return chess; 102 } 103104/** 判断玩家输赢 */105publicstaticint maskGameResults(String m[][], String player){ 106//棋子连续数107int numberRow = 0; 108if( (m[0][0]==player && m[0][1]==player && m[0][2]==player) || 109 (m[1][0]==player && m[1][1]==player && m[1][2]==player) || 110 (m[2][0]==player && m[2][1]==player && m[2][2]==player) ){ 111if(player == "X") 112return 1; 113else114return 2; 115 } 116if( (m[0][0]==player && m[1][0]==player && m[2][0]==player) || 117 (m[0][1]==player && m[1][1]==player && m[2][1]==player) || 118 (m[0][2]==player && m[1][2]==player && m[2][2]==player) ){ 119if(player == "X") 120return 1; 121else122return 2; 123 } 124if( (m[0][0]==player && m[1][1]==player && m[2][2]==player) || 125 (m[0][2]==player && m[1][1]==player && m[2][0]==player) ){ 126if(player == "X") 127return 1; 128else129return 2; 130 } 131for(int i = 0; i<3; i++){ 132for(int j = 0; j<3; j++){ 133if(m[j][i] == " ") 134return 0; 135 } 136 } 137return -1; 138 } 139 }
新手刚学java,判断输赢的算法比较死,如有更好的解决方法请评论区留言。
原文:https://www.cnblogs.com/buyiyangdefengcai/p/11664287.html
内容总结
以上是互联网集市为您收集整理的《Java语言程序设计》编程练习8.9(游戏:#字游戏)全部内容,希望文章能够帮你解决《Java语言程序设计》编程练习8.9(游戏:#字游戏)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。