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常用的加密算法
Jun 11 Java/Android
Spring Bean的实例化之属性注入源码剖析过程
Jun 13 Java/Android
在Java中Collection的一些常用方法总结
Jun 13 Java/Android
springboot利用redis、Redisson处理并发问题的操作
Jun 18 Java/Android
springboot 多数据源配置不生效遇到的坑及解决
Nov 17 Java/Android
Java 在线考试云平台的实现
Nov 23 Java/Android
Java中try catch处理异常示例
Dec 06 Java/Android
Android基于Fresco实现圆角和圆形图片
Apr 01 Java/Android
Mybatis-Plus 使用 @TableField 自动填充日期
Apr 26 Java/Android
mybatis-plus模糊查询指定字段
Apr 28 Java/Android
springcloud整合seata
May 20 Java/Android
ConditionalOnProperty配置swagger不生效问题及解决
Jun 14 Java/Android
Java 定时任务技术趋势简介
Java版 单机五子棋
详解Android中的TimePickerView(时间选择器)的用法
Apr 30 #Java/Android
Spring Boot 实现 WebSocket
Android存储中最基本的文件存储方式
Jmerte 分布式压测及分布式压测配置
Java存储没有重复元素的数组
Apr 29 #Java/Android
You might like
php读取msn上的用户信息类
2008/12/05 PHP
php使HTML标签自动补全闭合函数代码
2012/10/04 PHP
PHP使用mysqldump命令导出数据库
2015/04/14 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
javascript中JSON对象与JSON字符串相互转换实例
2015/07/11 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
2016/09/17 Javascript
jQuery实现最简单实用的分秒倒计时
2017/02/05 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
2018/09/21 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
浅谈Python中range和xrange的区别
2017/12/20 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
Python3 使用pillow库生成随机验证码
2019/08/26 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
Django REST Framework 分页(Pagination)详解
2020/11/30 Python
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
Linux的主要特性
2014/10/06 面试题
创立科技Java面试题
2015/11/29 面试题
个人委托书范本
2014/04/02 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
2016社区平安家庭事迹材料
2016/02/26 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
快速学习Oracle触发器和游标
2021/06/30 Oracle
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang