首页 > 编程语言 >C编程练习-五子棋升级版(键盘的上下左右键控制落子)

C编程练习-五子棋升级版(键盘的上下左右键控制落子)

时间:2023-07-28 15:22:39浏览次数:40  
标签:&& 落子 int 五子棋 break oy board key 升级版

#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#include<getch.h>

char board[15][15]; //棋盘
char role = '@'; //角色
char key_x,key_y; //下子坐标

//初始化棋盘
void init_board(void)
{
  for(int i=0; i<15; i++)
  {
    for(int j=0; j<15; j++)
    {
      board[i][j] = '*';
    }
  }
}

//显示棋盘
void show_board(void)
{
  system("clear");
  for(int i=0; i<15; i++)
  {
    for(int j=0; j<15; j++)
    {
      printf(" %c",board[i][j]);
    }
    printf("\n");
  }
}

//落子
void get_key(void)
{
  printf("请%c落子:",role);
  for(;;)
  {
    printf("\33[%hhd;%hhdH",key_x+1,(key_y+1)*2);
    switch(getch())

    {
      case 183: key_x > 0 && key_x--; break;  //上
      case 184: key_x < 14 && key_x++; break; //下
      case 186: key_y > 0 && key_y--; break;  //左
      case 185: key_y < 14 && key_y++; break;//右
      case 10:
      if('*' == board[key_x][key_y])
      {
        board[key_x][key_y] = role;
        return;
      }
    }
  }
}

//计算某个小方向上有多少个连续棋子
int count_key(int ox,int oy) //    左:ox=-1       右:ox=1         上: oy=-1         下: oy=1
{
  int count = 0;
  for(int x=key_x+ox,y=key_y+oy; 0<=x && 14>=x && 0<=y && 14>=y; x+=ox,y+=oy)
  {
    if(board[x][y] == role) count++;
    else break;
  }
  return count;
}

//判断是否五子连珠
bool is_win(void)
{
  if(4<=count_key(-1,0)+count_key(1,0)) return true; //横
  if(4<=count_key(0,-1)+count_key(0,1)) return true; //竖
  if(4<=count_key(-1,-1)+count_key(1,1)) return true; //左对角线
  if(4<=count_key(-1,1)+count_key(1,-1)) return true; //右对角线
  return false;
}

int main(int argc,const char* argv[])
{
  init_board();
  for(int i=0; i<225; i++)
  {
    show_board();

    get_key();

    if(is_win())
    {
     show_board();
      printf("游戏结束,恭喜%c胜利!\n",role);
      return 0;
    }

    //交换角色
    role = role=='@'? '$' : '@';
  }
  printf("和棋!\n");
}  

 

标签:&&,落子,int,五子棋,break,oy,board,key,升级版
From: https://www.cnblogs.com/ljf-0804/p/17587700.html

相关文章

  • Qt(5.8.0)-运行框升级版
    Qt编程实现简单的命令行窗口本文介绍如何使用Qt框架编写一个简单的命令行窗口应用程序。通过该程序,用户可以在窗口中输入命令,并通过点击按钮执行命令。首先,我们需要创建一个名为"Widget"的类,继承自QWidget,用于创建应用程序的主窗口。以下是widget.h头文件中的代码:#ifndefWIDGE......
  • 五子棋人机对战
    #include<windows.h>#include<windowsx.h>#include<ShObjIdl.h>#include<cmath>#include<cstdlib>#include<ctime>#include<vector>#include<algorithm>#include<iostream>#include<cstdio>......
  • 强化学习:基于蒙特卡洛树和策略价值网络的深度强化学习五子棋(含码源)
    强化学习:基于蒙特卡洛树和策略价值网络的深度强化学习五子棋(含码源)特点自我对弈详细注释流程简单代码结构net:策略价值网络实现mcts:蒙特卡洛树实现server:前端界面代码legacy:废弃代码docs:其他文件utils:工具代码network.py:移植过来的网络结构代码model_5400.p......
  • imessages群发,苹果imessages短信,苹果imessages推信,完美实现 - 电脑升级版
    一、PC电脑版苹果系统(MacOS)上实现imessages群发总结为以下几种方式:/*MacOS苹果系统,正常情况下,只能安装到苹果公司自己出品的Mac电脑,俗称白苹果,不能安装到各种组装机或者其他品牌的品牌机上,黑苹果的的原理,就是通过一些“破解补丁”工具欺骗macOS系统,让苹果系统认为你的电......
  • 7/9号随笔 落子无悔
    堕落了几天,但我并不想谈论那几天怎么样。因为都没有任何意义了。毕竟过去的都无法改变了。为什么学习。正如达尔文一样,变成更好的人。其实我喜欢很多东西,想买小米13u,哪怕找父母也会给我买,但是那花的是他们的钱,我想去自由自在,想去老君山,想去无人之地,看看山川河流,感受鸟语花香。......
  • 【五子棋实战】第6章 调用接口进行联调
    【五子棋实战】第6章调用接口进行联调Ajax调用接口调用五子棋接口点击优化尾声更多待开发的功能Ajax调用接口  引入Jquery,使用JQ封装的ajax,demo如下:<scriptsrc="jquery-3.5.0.min.js"></script><script>$.ajax({ url:'http://localhost:5000/api/next_step',......
  • 【五子棋实战】第4章 部署五子棋计算接口到Window、Linux上
    【五子棋实战】第4章部署五子棋计算接口到Window、Linux上python项目打包成exe可执行文件##步骤一、安装pyinsatller##步骤二、使用pyinstaller打包Python程序##操作演示##注意事项!!python的Flask接口部署(Linux)##步骤一、安装必要的软件依赖##步骤二、安装Flask和......
  • 联网版五子棋
    下面的代码实现了一个非常简单的联网五子棋程序,写给学生的一个例子,很多功能都还没实现,用的也是民间规则,姑且一看吧!棋盘类:packagecom.accp;importjava.awt.Color;importjava.awt.Graphics;/***棋盘*@author骆昊**/publicclassBoard{ privateint[][]board......
  • P1478 陶陶摘苹果(升级版)(C++_贪心)
    题目描述又是一年秋季时,陶陶家的苹果树结了n个果子。陶陶又跑去摘苹果,这次他有一个a公分的椅子。当他手够不着时,他会站到椅子上再试试。这次与NOIp2005普及组第一题不同的是:陶陶之前搬凳子,力气只剩下s了。当然,每次摘苹果时都要用一定的力气。陶陶想知道在s<0s<0之前最多......
  • R语言实战(第三版)全新升级版,超过30万学习者入手的畅销书
    在我刚入学那会儿初次接触R语言,看的第一本工具书就是《R语言实战》,收获良多,当时还只是第二版。最近和人民邮电出版社的好朋友交流发现,他告诉我上个月刚刚出版了《R语言实战第三版》,豆瓣评分9.2,被称为最牛R语言实战书升级版。上面这本书的第1版于2012年出版,距今已经过去1......