五子棋

JAVA五子棋小游戏   学完Java基础书时总想着要自己编写出小游戏,事情并非如自己所愿,每次鼓起勇气来编写时,总是不知道该怎么写,写到一半就开始放弃。因为自己习惯跟着视屏去看和编写,思路和方法都是老师教,自己根本无法去考虑那么的多,所以一直写不出属于自己的东西。今天通过这篇文章来分享一下Java五子棋的编写思路。 需要知道五子棋的简单内容,如有棋盘、棋子、输赢规则等需要实现。 为了一步一步讲解,下面的代码将会... 阅读详情
package fiveChess;
import java.util.Scanner;
public class FiveChess {
    public static final int  LENGTH=16;
    public static  String[][] chess=new String[LENGTH][LENGTH];
    public static Scanner sc = new Scanner(System.in);
    //打印棋盘
    public static void printChess() {
        //打印横坐标
        for (int k = 0; k < chess.length; k++) {
            if (k == 0) {
                System.out.print("  ");
            } else if (k < 10 && k > 0) {
                System.out.print(k+" ");
            }else{
                System.out.print(k);
            }
        }
        System.out.println();
        for(int i=1;i<chess.length;i++){
            //打印纵坐标
            if (i == 0) {
                System.out.print(" ");
            } else if (i < 10 && i > 0) {
                System.out.print(i+" ");
            }else{
                System.out.print(i);
            }
            for (int j =1; j <chess.length; j++) {
                System.out.print(chess[i][j]);
            }
            System.out.println();
        }
    }
    //输入坐标
    public static void inputChess(int x,int y,int count,String str) {
        if (count % 2 == 0) {
            System.out.println("白棋请输入要下的坐标x和y");
            str="●";
        }
        else{
            System.out.println("黑棋请输入要下的坐标x和y");
            str="⭕";
        }
        x=sc.nextInt();
        y=sc.nextInt();
        if (x < 1 || x > 15 || y < 1 || y > 15) {
            System.out.println("超出棋盘范围,请重新输入坐标 1<=x,y<=15");
        }
        else{
            if (!chess[x][y].equals("十")) {
                System.out.println("此处已被占用,请重新输入坐标1<=x,y<=15");

            }
            else {
                chess[x][y]=str;
                printChess();
                if (CheckWin(x,y)) {
                    System.out.println("胜利");
                    return ;
                }
            }
        }
    }
    //判断胜负
    public static boolean CheckWin(int xIndex, int yIndex) {
        int max = 0;
        int tempXIndex = xIndex;
        int tempYIndex = yIndex;
        // 三维数组记录横向,纵向,左斜,右斜的移动
        int[][][] dir = new int[][][] {
                // 竖着
                { { -1, 0 }, { 1, 0 } },
                // 横向
                { { 0, -1 }, { 0, 1 } },
                // 左斜
                { { -1, -1 }, { 1, 1 } },
                // 右斜
                { { 1, -1 }, { -1, 1 } } };

        for (int i = 0; i < 4; i++) {
            int count = 1;
            //j为0,1分别为棋子的两边方向,比如对于横向的时候,j=0,表示下棋位子的左边,j=1的时候表示右边
            for (int j = 0; j < 2; j++) {
                boolean flag = true;
                /**
                 while语句中为一直向某一个方向遍历
                 有相同颜色的棋子的时候,Count++
                 否则置flag为false,结束该该方向的遍历
                 **/
                while (flag) {
                    tempXIndex = tempXIndex + dir[i][j][0];
                    tempYIndex = tempYIndex + dir[i][j][1];

                    //这里加上棋盘大小的判断,这里我设置的棋盘大小为20 具体可根据实际情况设置 防止越界
                    if (tempXIndex >= 1 && tempXIndex < chess.length && tempYIndex >= 1 && tempYIndex <chess.length) {
                        if ((chess[tempXIndex][tempYIndex] == chess[xIndex][yIndex])) {
                            count++;
                            //System.out.println(count);
                        }
                        else
                            flag = false;
                    }else{
                        flag = false;
                    }

                }
                tempXIndex = xIndex;
                tempYIndex = yIndex;
            }
            if (count >= 5) {
                max = 1;
                break;
            } else
                max = 0;
        }
        if (max == 1)
            return true;
        else
            return false;
    }

    public static void main(String[] args) {

        for(int i=1;i<chess.length;i++){
            for (int j =1; j <chess.length; j++) {
                chess[i][j]="十";
            }
        }
        int x=0;
        int y=0;
        //记录下棋次数
        int count=0;
        String str="";
        System.out.println("下棋开始");
        printChess();
        while (true) {
            inputChess(x,y,count,str);
            count++;
        }

    }

}

 

QT五子棋项目详解之一:界面绘制 首页展示:第1步设置首页:新建项目,选择mainwindow基类,在UI界面,选择按钮和lable标签。给label设置背景图片哥的妹子。为按钮设置槽。第2步:新建qt界面师设计类gamewindow,点击人人对战或人机对战就会转到gamewindow界面。第3步:绘制棋盘棋盘绘制效果图:3.1设置界面大小和背景,setmouseTracking为接受鼠标移动3.2 绘制棋盘边界边框,棋盘内颜色3... 阅读详情

相关推荐

java五子棋

java五子棋总结 刚刚学习java不久,尝试自己做了一个五子棋先附上一个运行效果的图: 五子棋的主要目的: 1.练习java面向对象的编程思想 2.掌握监听器的使用(鼠标监听器) 制作五子棋为了代码的可扩充性,我们首先要定义一个五子棋的各个属性的接口: /** * 五子棋的相关属性 * @author Administrator * */ public int

meiyijian的博客 8866

五子棋:起源、原理与游戏规则、vue实现五子棋案例游戏

五子棋作为一种深受欢迎的棋类游戏,其简单的规则和丰富的历史背景使其成为了中华文化的一部分。通过了解五子棋的历史、原理和游戏规则,我们可以更好地理解这一游戏的魅力所在,并在游戏中体验到中国传统文化的独特韵味。

qq_28245087的博客 3948

基于java五子棋游戏设计与实现

获取项目源文件,联系Q:1225467431,指导其它毕设,课设 摘要:五子棋作为中国古代的传统黑白棋种之一,有着广泛的群众基础,是一种老少皆宜的棋类休闲游戏。开发一款五子棋游戏可以使广大棋牌游戏爱好者在闲暇时间切磋棋艺,对互联网技术的推广和个人棋艺的提高都有好处。的提高都有好处。 本文是采用JAVA语言写的五子棋游戏,JAVA语言无论体现在跨平台还是在面向对象,可移植性,安全性,并发机制和可视化...

【含源文件】 5535

C语言实践----五子棋(附源代码及思路讲解)

用C语言设计五子棋小游戏,棋盘符号┌┬┐├┼┤└ ┴ ┘。了解五子棋下棋过程1、在菜单界面选择对战方式、进行上一局或退出游戏2、绘制棋盘、棋子3、执黑子的玩家先落子,然后双方轮流落子4、判断胜负或平局5、退出游戏 ...

weixin_61866141的博客 9万+

python五子棋代码最简单的,python五子棋代码能复制

计算方法实际上是一样的,只是方向不同,所以定义一个偏移量数组,不同的偏移量表示不同的方向,这样就可以利用循环来实现了,节省了很多代码。这样不太严谨,写出来的电脑估计水平很菜,但是这个思路却是对的,落子就是要找到最值得的地方,那么我们干脆对每一个可落子的地方来做一个评估,选出最优解。五子棋执黑是必赢的,代码中,玩家就是执黑先手,电脑执白后手,所以,下的好是完全可以赢电脑的,不过一个小小失误也很可能被电脑翻盘。这里我们需要了解一下五子棋的几种基本棋形:连五,活四,冲四,活三,眠三,活二,眠二。

wenangou6 1325

Flutter AI五子棋

在基础版本的AI中,我们已经取得了下一步较好的maxCount个位置,有每个位置有着对应的分数,那么我们就可以把这些位置都落子一次,这个时候我们需要给每一种结果一个分数,就是下图中的Utility(下图是井字棋游戏,整体逻辑差不多)。这个分数是站在Max的角度评估的,比如上图中我赢了就是+1,输了是-1,平局时0。相较于象棋、围棋,五子棋的局面并不复杂,估值还算比较简单,我们简单的用一个整数表示当前局势,分数越大,则自己优势越大,分数越小,则对方优势越大,分数为0是表示双方局势相当。.maxValue?

txaz6的博客 3729

五子棋(完整版)

/这个很重要,用来判断是该白棋走还是黑棋走,每次走完++,每次判断是偶数,该白棋,是奇数,该黑棋(一般用flag判断,这是我个人喜好)cout<<"游戏说明:白棋先走,落子请输入坐标,其他的不用我说了吧";cout<<"x和y坐标均超出棋盘范围!if(m%2==0) {//是偶数,该白棋。cout<<"└";cout<<"x坐标超出棋盘范围!cout<<"y坐标超出棋盘范围!cout<<"┘";cout<<"●";cout<<"加载中...";cout<<"作者:李梓萱";cout<<"五 子 棋";

qq214936qq的博客 1839

Java五子棋总结

对通过Java实现的简易五子棋项目的总结 所用逻辑算法梳理 棋盘绘制 采用了循环的方式绘制纵向与横向的线来实现了棋盘的构成 super.paint(g); //绘制棋盘 g.setColor(new Color(0xEED00B)); g.fillRect(0,0,850,850); g.setColor(Color.BLACK); for (int i = 0; i <= CLO; i++){

Fantaaaa的博客 2218

脚本:用python实现五子棋

Five in a Row (Gobang)

猛码Memmat 2078

AI五子棋——超强改进版本

【代码】AI五子棋。

小天狼星_布莱克 的博客 6680

基于C++ α-β剪枝算法实现的AI五子棋游戏

通过本次实验,加强了组员之间的沟通协调能力,同时也提高了我们对αβ减枝算法的了解。我们更了解了五子棋相关的游戏规则以及一些技巧,拓宽了我们的知识面,有助于我们在未来的生活中更好的与人交流。同时,经过此次实验,我们深入了解了棋类人工智能算法,进一步的提升了我们的专业水平,有助于我们在未来的就业与科研岗位上走的更远。虽然α-β减枝实现起来非常容易,但是五子棋的局势估计却十分的有挑战性,其局势估计的准确与否直接影响了程序的运行结果是否令人满意,AI是否能够展现出足够的智能。

神仙别闹的自留地 1734

五子棋(C语言实现)

讲解C语言实现五子棋

Han同学 4801

五子棋(c#)

没有人机对战正在做!

Java五子棋全代码

用Java编写简单的五子棋 前言    这两天在空闲时间做了个五子棋项目,分享给大家看一下,界面是这样的:        呜呜呜,界面很丑我知道,本人虽有几年PS基础,但知识浅薄,审美观不尽人意,做到如此实属极限(其实我懒得做了),大家将就着看看吧。        下面放出代码,为方便大家参考,我几乎每条代码都标有注释。     测试类代码 public class Test { public static void main(String[] args) { MyJFrame m

guyu的博客 4万+

五子棋ai人工智能(网页版)

五子棋AI算法原理,博弈树、极大极小值搜索算法、α-β剪枝算法

深入解析MOSFET结电容与分布参数:Cgd、Cgs、Cds与Ciss、Crss、Coss的关系与应用

本文深入解析了MOSFET结电容Cgd、Cgs、Cds及其等效参数Ciss、Crss、Coss对开关性能的影响。文章详细阐述了米勒电容Cgd如何导致开关损耗与振荡,并提供了基于电容参数的高频电路选型、驱动设计及PCB布局优化等实战指南,帮助工程师解决开关电源与电机驱动中的常见问题。

weixin_29240711的博客 1297

【Java之五子棋】——java五子棋游戏

基本思路: 1.先有一个界面可以弹出窗口,在界面上重写paint方法,在这个方法里加入棋盘,使得棋盘可以不断重绘,不会因为刷新而消失; 2.创建鼠标监听器,为了让鼠标监听器界面可以下黑白棋子; 3.再创建一个判断输赢的类,可以用数组来存储棋子 接下来完成具体步骤: 1.创建一个Gobang的类,继承了JFrame的功能,因此以前会写jf.setTitle("五子棋");这里就可以用this代替或者不写,下面这四个就是分别用了这两个方法 2.重写paint方法,绘制棋盘 可以先画两条直线

qq_50497708的博客 1万+

Unity FPS射击控制系统:数据驱动的武器行为解耦方案

在Unity第一人称射击(FPS)开发中,射击系统常因输入、状态、行为耦合导致连发异常、换弹冲突与网络同步失准。其本质是缺乏对‘武器行为’(如后坐力曲线、弹药逻辑)与‘射击控制’(如输入合法性校验、冷却调度)的正交分离。本方案基于ScriptableObject实现WeaponData数据资产化,配合ShootingController状态机服务,达成输入解耦、运行时参数可调、协程受控、网络预测友好等工程目标。适用于中大型FPS项目架构升级与数据驱动转型,尤其解决Unity InputSystem与物理反馈

weixin_30536861的博客 610

原生JS五子棋

用js实现一款五子棋小游戏,首先把五子棋所有的功能总结一下 然后是html部分, 一个canvas标签. <body style="background: rgb(248, 204, 179);"> <canvas style="border:solid 2px red;margin: 50px;" id="can" height="600" width="600"></canvas> <div id="ts" style="font-size: 50px;d

liuzhenweii的博客 3248

稚晖君Dummy机械臂CAN总线控制详解:从代码到实战(附常见问题排查)

本文深入解析了稚晖君Dummy机械臂的CAN总线控制技术,从协议设计到代码实现,详细介绍了CAN总线在机械臂控制中的核心价值、通信协议栈设计、运动控制指令实现及常见问题排查方法。通过实战案例和代码示例,帮助开发者快速掌握机械臂CAN总线控制的关键技术。

uuu88的博客 295

谈谈 FOC和BLDC 电机控制

更具体地说,通过 “Park 变换”,我们可以把三相交流电流信号转换成两相直流电流信号,从而可以把三相交流电机的控制变得和两相直流电机控制一样简单。在内环 “电流环”中,一些比较重要的模块有 “Clark 变换” 和 “Park 变换” 等数学模块、电机电流信号检测模块以及能够提供电机的转速和转角位置信息的模块。日前,Qorvo 电机控制应用高级系统/应用工程师张绍发表了一个与 BLDC 和 FOC 相关的演讲,科普了 FOC 的相关知识,还讲解了 Qorvo 用于简化 FOC 实施方案的方法。

U_YAO的博客 2119

Android五子棋学习

五子棋 Android课程作业,五子棋制作。 由于JAVA只懂一点,Android开发也才学了点皮毛,本代码对大佬无参考性,可以和初学者交流。 代码质量不高,别学我乱写,但是逻辑简单清晰。 功能和界面都简单,但是好上手。 效果展示: 开始界面: 黑棋先下 游戏中:在下方显示当前回合是白棋还是黑棋(红子作为白棋) 点击重新开始:页面清空 游戏结束: 点击再来一局:页面清空 工程结构 第一步,画网格 activity_main.xml中 TextView.java 第二步:画棋子 通过画黑圆和红圆

weixin_44118217的博客 1860

华为OD机试双机位C卷-用户入网定期复评(C/C++/Py/Java/Js/Go)

华为OD机试(机考)双机位C卷 【用户入网定期复评】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【用户入网定期复评】。

qq_45776114的博客 839
上一篇: python爬取qq空间说说生成词云
24号同学
博客等级 码龄10年 43粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值