五子棋人机交互

五子棋人机交互 程序分两部分:1。核心程序 2。windows图形界面程序此处只介绍核心程序部分。下面,我们边看边侃。//========定义文件部分=============================#define MAX_LENGTH 19 //棋盘格数#define COMPUTER 1 //计算机棋子#define PLAYER 2 //
摘要由CSDN通过智能技术生成
五子棋人机交互
程序分两部分:1。核心程序  2。windows图形界面程序
此处只介绍核心程序部分。下面,我们边看边侃。
//========定义文件部分=============================
#define MAX_LENGTH  19  //棋盘格数
#define COMPUTER  1    //计算机棋子
#define PLAYER    2    //玩家棋子
int qp[MAX_LENGTH][MAX_LENGTH];    //定义棋盘
int iswin;    //输赢标记,1=计算机胜,2=玩家胜,0=未分胜负;
#define RandInt(n)  (rand()%n)    //随机数宏
struct LIST
{
  int id;
  struct LIST *next;
}*PList=NULL,*CList=NULL;   //定义链表,Plist为玩家棋局链表指针,用于阻击,Clist为计算机棋局链表指针,用于攻击
//=========核心程序代码部分=========================
//本函数将数据add添加到链表中,并将数据按从大到小排序
//add低位为棋盘位置,高位代表该位置在当前棋局中的优先级
static int AddList(struct LIST **List,int add)
{
  struct LIST *tmp=*List;
  struct LIST **temp=List;
  int atemp=add>>16;
  int id;
  struct LIST *newlist=malloc(sizeof(*newlist));
  if(!newlist)
    return 1;
  while(tmp)
  {
    id=(tmp->id)>>16;
    if(id<=atemp)
      break;
    if(id>atemp)
    {
      temp=&(tmp->next);
      tmp=tmp->next;
    }
  }
  newlist->id=add;
  newlist->next=tmp;
  *temp=newlist;
  return 0;
}
//函数获得指定链中最大优先级的值
static int GetMax(struct LIST *List)
{
  if(List)
    return (List->id>>16);
  return 0;
}
//函数获得指定链中的链首数据
static int GetLast(struct LIST **List)
{
  if(*List)
  {
    int ret;
    struct LIST *temp;
    ret=((*List)->id&0xffff);//取低字节棋盘位置数据
    temp=*List;
    *List=(*List)->next;
    free(temp);
    return ret;
  }
  return 0;
}
#define DestroyList(l)  while(GetLast(&l))  //宏——销毁链表
//函数探测参数tmp指定的棋盘位置的优先级并加入相应的链表中
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值