java版 简单三子棋游戏


Posted in Java/Android onMay 04, 2022

本文实例为大家分享了java版 简单三子棋游戏的具体代码,供大家参考,具体内容如下

JOptionPane类的使用

编写程序,实现简单的三子棋游戏。在三子棋中,双方在3×3的棋盘中轮流下棋,一方用*示,另一方用O表示。如果一方的3个棋子占据了同一行,同一列或者对角线,则该方获胜。如果棋盘已被棋子占满,但没有一方获胜则出现平局。在程序中,一方为用户,用户在界面上输入每次下棋的位置;另一方下棋的位置为随机自动生成。示例界面如图所示。

java版 简单三子棋游戏

java版 简单三子棋游戏

提示:(1) 采用Scanner类或者JOptionPane类中提供的方法输入,输出采用System.out中的方法或JOptionPane类提供的方法。 (2) 字符串处理可以使用String或StringBuffer类。

实现代码:

import java.util.Random;
import javax.swing.*;
public class Main {
   public static boolean check(StringBuffer st,int pos){   //检查pos上的棋子有没有获胜
      char des=st.charAt(pos);
      char []s=new char[10];
      for(int i=1;i<=9;i++) s[i]=st.charAt(i);
      if((s[3]==des&&s[6]==des&&s[9]==des)||
      (s[1]==des&&s[4]==des&&s[7]==des)||
      (s[2]==des&&s[5]==des&&s[8]==des)||
      (s[1]==des&&s[3]==des&&s[2]==des)||
      (s[6]==des&&s[4]==des&&s[5]==des)||
      (s[9]==des&&s[7]==des&&s[8]==des)||
      (s[1]==des&&s[5]==des&&s[9]==des)||
      (s[3]==des&&s[5]==des&&s[7]==des)) return true;
      return false;
   }
   public static void main(String[] args) {
      StringBuffer s= new StringBuffer("0123456789");
      String tp;
      for(int i=0;i<=5;){
         int k=-1;
         tp=JOptionPane.showInputDialog("---------------------------\n|    "+s.charAt(1)+"    |    "+s.charAt(2)+"    |    "+s.charAt(3)+"    |\n---------------------------\n|    "+s.charAt(4)+"    |    "+s.charAt(5)+"    |    "+s.charAt(6)+"    |\n---------------------------\n|    "+s.charAt(7)+"    |    "+s.charAt(8)+"    |    "+s.charAt(9)+"    |\n---------------------------\n"+"请输入落子位置(1~9):");
         boolean f=true;
         if(tp.length()==1){
            k=tp.charAt(0)-'0';
            if(k>=1&&k<=9){
               if(s.charAt(k)>='1'&&s.charAt(k)<='9'){
                  i++;        //有效下棋
                  f=false;
               }
            }
         }
         while(f){
            tp=JOptionPane.showInputDialog("---------------------------\n|    "+s.charAt(1)+"    |    "+s.charAt(2)+"    |    "+s.charAt(3)+"    |\n---------------------------\n|    "+s.charAt(4)+"    |    "+s.charAt(5)+"    |    "+s.charAt(6)+"    |\n---------------------------\n|    "+s.charAt(7)+"    |    "+s.charAt(8)+"    |    "+s.charAt(9)+"    |\n---------------------------\n"+"输入错误,请重新输入落子的位置:");
            if(tp.length()==1){
               k=tp.charAt(0)-'0';
               if(k>=1&&k<=9){
                  if(s.charAt(k)>='1'&&s.charAt(k)<='9'){
                     i++;        //有效下棋
                     f=false;
                  }
               }
            }
         }
         //在k处落子
         s.replace(k,k+1,"O");
         if(check(s,k)){
            //获胜
            JOptionPane.showMessageDialog(null,"---------------------------\n|    "+s.charAt(1)+"    |    "+s.charAt(2)+"    |    "+s.charAt(3)+"    |\n---------------------------\n|    "+s.charAt(4)+"    |    "+s.charAt(5)+"    |    "+s.charAt(6)+"    |\n---------------------------\n|    "+s.charAt(7)+"    |    "+s.charAt(8)+"    |    "+s.charAt(9)+"    |\n---------------------------\n"+"恭喜你,你赢了!");
            break;
         }
         //电脑随机落子
         if(i==5) {
            JOptionPane.showMessageDialog(null,"---------------------------\n|    "+s.charAt(1)+"    |    "+s.charAt(2)+"    |    "+s.charAt(3)+"    |\n---------------------------\n|    "+s.charAt(4)+"    |    "+s.charAt(5)+"    |    "+s.charAt(6)+"    |\n---------------------------\n|    "+s.charAt(7)+"    |    "+s.charAt(8)+"    |    "+s.charAt(9)+"    |\n---------------------------\n"+"平局!");
            break;
         }
         Random rs=new Random();
         k=rs.nextInt(9)+1;
         while(k<1||k>9||s.charAt(k)=='*'||s.charAt(k)=='O') k=rs.nextInt(9)+1;
         s.replace(k,k+1,"*");
         if(check(s,k)){
            //电脑胜
            JOptionPane.showMessageDialog(null,"---------------------------\n|    "+s.charAt(1)+"    |    "+s.charAt(2)+"    |    "+s.charAt(3)+"    |\n---------------------------\n|    "+s.charAt(4)+"    |    "+s.charAt(5)+"    |    "+s.charAt(6)+"    |\n---------------------------\n|    "+s.charAt(7)+"    |    "+s.charAt(8)+"    |    "+s.charAt(9)+"    |\n---------------------------\n"+"你输了,再接再厉吧!");
            break;
         }
      }
   }
}

以上就是本文的全部内容,希望对大家的学习有所帮助。


Tags in this post...

Java/Android 相关文章推荐
教你用Java Swing实现自助取款机系统
Jun 11 Java/Android
为什么在foreach循环中JAVA集合不能添加或删除元素
Jun 11 Java/Android
Java内存模型之happens-before概念详解
Jun 13 Java/Android
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
Jun 21 Java/Android
总结一下关于在Java8中使用stream流踩过的一些坑
Jun 24 Java/Android
Spring Boot 启动、停止、重启、状态脚本
Jun 26 Java/Android
Java基础之this关键字的使用
Jun 30 Java/Android
Log4j.properties配置及其使用
Aug 02 Java/Android
Java 实现限流器处理Rest接口请求详解流程
Nov 02 Java/Android
spring cloud eureka 服务启动失败的原因分析及解决方法
Mar 17 Java/Android
Java 多态分析
Apr 26 Java/Android
前端与RabbitMQ实时消息推送未读消息小红点实现示例
Jul 23 Java/Android
Java 定时任务技术趋势简介
Java版 单机五子棋
详解Android中的TimePickerView(时间选择器)的用法
Apr 30 #Java/Android
Spring Boot 实现 WebSocket
Android存储中最基本的文件存储方式
Jmerte 分布式压测及分布式压测配置
Java存储没有重复元素的数组
Apr 29 #Java/Android
You might like
我的php学习笔记(毕业设计)
2012/02/21 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
2014/12/04 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
JavaScript插件化开发教程 (一)
2015/01/27 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
2016/04/07 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
jqPlot jQuery绘图插件的使用
2016/06/18 Javascript
Javascript之面向对象--方法
2016/12/02 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
JS开发自己的类库实例分析
2019/08/28 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
整理Python中的赋值运算符
2015/05/13 Python
python从入门到精通(DAY 2)
2015/12/20 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
python实现同一局域网下传输图片
2020/03/20 Python
python使用梯度下降算法实现一个多线性回归
2020/03/24 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
2020/04/29 Python
python可迭代对象去重实例
2020/05/15 Python
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
高中毕业自我鉴定范文
2013/10/02 职场文书
农村产权制度改革实施方案
2014/03/21 职场文书
实习公司领导推荐函
2014/05/21 职场文书
2015年团支部工作总结
2015/04/03 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python
MySQL时区造成时差问题
2022/04/13 MySQL