找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1420|回复: 3
打印 上一主题 下一主题
收起左侧

为什么我这个单片机五子棋C语言代码判断不了水平的五连子?

[复制链接]
跳转到指定楼层
楼主
ID:905831 发表于 2022-11-7 19:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. unsigned  char idata qipan[8][8]={0}; //棋盘
  2. unsigned char x=0,y=0,z=7,y=7;
  3.         void anjian() //通过按键确定光标位置和下棋位置
  4.         {
  5.         
  6.         if(K1==0)flag1=1;
  7.    if(K1==1&&flag1==1)        //放手
  8. { flag1=0;
  9.          if(x>=1)//
  10.         x--;
  11.         if(z>=1)//棋盘能下的位置
  12.         z--;
  13. }
  14.                         
  15.         if(K2==0)flag2=1;
  16.    if(K2==1&&flag2==1)        //放手
  17. { flag2=0;
  18.                         if(x<7)
  19.                                 x++;
  20.                                         if(z<7)
  21.                                 z++;               
  22.         }
  23.         if(K3==0)flag3=1;
  24.    if(K3==1&&flag3==1)        //放手
  25. { flag3=0;
  26.                 if(y>=1)
  27.                         y--;
  28.                 if(k>=1)
  29.                         k--;
  30.                 }
  31. if(K4==0)flag4=1;
  32.    if(K4==1&&flag4==1)        //放手
  33. { flag4=0;
  34.         
  35.                         if(y<7)
  36.                                 y++;
  37.                                 if(k<7)
  38.                                 k++;
  39.                 }

  40. if(K5==0)flag5=1;
  41.    if(K5==1&&flag5==1)        //放手
  42. { flag5=0;

  43.                         switch(nowplayer)
  44.                         {
  45.                                 case 1:player1lie[y]=player1lie[y]|(0xc000>>2*x);nowplayer=player2;qipan[k][z]=1; break;//落棋
  46.                                 case 2: player2lie[y]=player2lie[y]|(0xc000>>2*x);nowplayer=player1;qipan[k][z]=2; break;
  47.                         }
  48.                 }
  49.         }[i]void checkplayer1()//用户1胜
  50. {
  51. for(i=7;i>0;i--){        //判断棋子是否水平方向五连;
  52.                           for(j=3;j>0;j--)
  53.                 {
  54.                 if(qipan[i][j]==1&&qipan[i][j+1]==1&&qipan[i][j+2]==1&&qipan[i][j+3]==1&&qipan[i][j+4]==1){        //判断棋子是否是用户1的
  55.                         
  56.                   player1win();
  57. }
  58. }
  59.       void main()
  60.         {
  61.                 nowplayer=player1;
  62.                 while(1)
  63.                 {

  64.                         anjian();         //内有延迟函数         
  65.          checkplayer1();        //用户1胜               
  66.                   display(1);   //若延迟时间很短,则快速刷新本函数
  67.                 }
  68.         }
复制代码

大概函数就是这样,判断不出来五连子




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:905831 发表于 2022-11-7 21:01 | 只看该作者
这是完整的程序与仿真

40-基于51单片机的五子棋游戏设计.rar

400.06 KB, 下载次数: 11

回复

使用道具 举报

板凳
ID:844772 发表于 2022-11-8 08:42 | 只看该作者
你只做了play1的水平判定,而且范围只有(1,2)~(8,8),建议你用递归法,程序好写也不容易漏位置。
回复

使用道具 举报

地板
ID:123289 发表于 2022-11-8 10:30 | 只看该作者
以行判断为例(列判断略);
1、写1个行判断函数,从第1行,到第8行调用之。
行判断函数规则:
1、做两个连子计数器,一个计黑棋:JH;一个计白棋:JB。
2、用一个变量N计列号,从1列起依序取子(此时设置N=1):无子,JH=JB=0,黑子,JH+1,JB=0;白子,JH=0,JB+1。1列判完后N+1。
3、当JH或JB有一个>=5时就成了5连珠。1行判断函数也就结束了。
4、当列号N+JH或N+JB>=8时,1行判断函数结束(不成能5连珠了)。
写程序,先构思逻辑,逻辑通了,再动笔写。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表