期末大作业要求:

1.完成动物棋的对局功能;

2.能够实现复盘的功能;

具体操作如下:(图形库用的是EasyX)

因为是第一次做,可能会有些乱,有的地方会比较繁琐,也欢迎指出问题。

开始是一些准备工作。

#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include<stdlib.h>
#include<time.h>
#define R 16
//这里有用到一些全局变量
int a[14],b[14];
int A[14],B[14];
char c[14]={'E','E','T','T','L','L','W','W','D','D','C','C','M','M'};
char C[15];
int e[14],f[14];
int g[1000],h[1000];
//用结构体来标记棋子的位置
typedef struct locate
{int x;int y;
}Locate;
//用结构体来完成对棋子的计数
typedef struct num
{int E;int T;int L;int W;int D;int C;int M;
}player_1,player_2;typedef struct num_x
{int a;
}sum,num_1,num_2;
//一些函数声明
void Draw();
void draw(player_1*m,player_2*n,sum*d);
void Chess();
void PutChess(Locate*p,player_1*m,player_2*n,sum*d);
void chess(Locate*p,player_1*m,player_2*n,sum*d,num_1*q);
void playgame();
void show(player_1*m,player_2*n);
void FuPan();//主体框架
int main()
{int z;printf("1.开始游戏");printf("\n2.进行复盘");printf("\n选择:");scanf("%d",&z);switch(z){case 1:{playgame();_getch();};break;case 2:{FuPan();_getch();};break;default:break;}return 0;
}

接下来是一些更多的代码段

1.画棋盘

void Draw()
{int i, j = 32;cleardevice();setlinestyle(PS_SOLID, 2);setcolor(RGB(0, 0, 0));for (i = 1; i <= 17; i++){line(i * j, j, i * j, 17 * j);line(j, i * j, 17 * j, i * j);}circle(47, 47, R);setfillcolor(RGB(0, 0, 0));_getch();
}

2.敌我双方棋子的生成。

void draw(player_1*m,player_2*n,sum*d)
{int i, j = 32;cleardevice();setlinestyle(PS_SOLID, 2);setcolor(RGB(0, 0, 0));show(m,n);for (i = 1; i <= 17; i++){line(i * j, j, i * j, 17 * j);line(j, i * j, 17 * j, i * j);}for(i=0;i<14;i++){setfillcolor(BLACK);      //如果是所生成的随机数,则标黑outtextxy(44+a[i]*32,44+b[i]*32,c[i]);fillcircle(47+a[i]*32,47+b[i]*32,R);}for(i=0;i<=d->a;i++){clearcircle(e[i],f[i],R);}
}void Chess()                    //电脑自动生成棋子
{int m=32,x,y;int i,j;srand((int)time(0));a[0]=rand()%16;for(i=1;i<14;i++){a[i]=rand()%16;for(j=0;j<i;j++){if(a[i]==a[j]){i--;}}}b[0]=rand()%16;for(i=1;i<14;i++){b[i]=rand()%16;for(j=0;j<i;j++){if(b[i]==b[j]){i--;}}}for(i=0;i<14;i++){for(x=47;x<47+16*32;){for(y=47;y<47+16*32;){if(x==47+a[i]*32&&y==47+b[i]*32){setfillcolor(BLACK);      //如果是所生成的随机数,则标黑fillcircle(x,y,R);//circle(x,y,R);}y+=m;}x+=m;}}
}

3.playgame的框架

void playgame()
{initgraph(600, 600);setbkcolor(WHITE);cleardevice();Draw();_getch();Chess();char ch_1;int i;sum d;num_1 q;d.a=0;q.a=0;Locate p;p.x = 47;p.y = 47;player_1 m;player_2 n;m.E=2;m.T=2;m.L=2;m.W=2;m.D=2;m.C=2;m.M=2;n.E=2;n.T=2;n.L=2;n.W=2;n.D=2;n.C=2;n.M=2;while(1){if(m.E+m.T+m.L+m.W+m.D+m.C+m.M==0||n.E+n.T+n.L+n.W+n.D+n.C+n.M==0){if(m.E+m.T+m.L+m.W+m.D+m.C+m.M==0){outtextxy(300,250,"你赢了");FILE*fp;fp=fopen("1.dat","w");                      //每次要修改文件的名字int v=q.a;for(i=0;i<v;i++)fprintf(fp,"%d\t%d\t%d\n",v,g[i],h[i]);for(i=0;i<14;i++){A[i]=44+a[i]*32;B[i]=44+b[i]*32;fprintf(fp,"%d\t%d%c\n",A[i],B[i],C[i]);}fclose(fp);_getch();break;}else{outtextxy(300,250,"你输了");FILE*fp;fp=fopen("1.dat","w");                       //每次要修改文件的名字int v=q.a;for(i=0;i<v;i++)fprintf(fp,"%d\t%d\t%d\n",v,g[i],h[i]);for(i=0;i<14;i++){A[i]=44+a[i]*32;B[i]=44+b[i]*32;fprintf(fp,"%d\t%d%c\n",A[i],B[i],C[i]);}fclose(fp);_getch();break;}}else{ch_1=_getch();if(ch_1==' '){PutChess(&p,&m,&n,&d);}elsechess(&p,&m,&n,&d,&q);}}
}

4.控制棋子的移动并记录坐标

void chess(Locate *p,player_1*m,player_2*n,sum*d,num_1*q)
{int y=p->y;int x=p->x;char ch_1;ch_1 = _getch();switch (ch_1){case 72: // up{if (y>47){p->y = p->y - 32;draw(m,n,d);circle(p->x, p->y, R);g[q->a]=p->x;h[q->a]=p->y;q->a=q->a+1;}break;}case 80: // down{if (y<47+15*32){p->y = p->y + 32;draw(m,n,d);circle(p->x, p->y, R);g[q->a]=p->x;h[q->a]=p->y;q->a=q->a+1;}break;}case 75: // left{if (x>47){p->x = p->x - 32;draw(m,n,d);circle(p->x, p->y, R);g[q->a]=p->x;h[q->a]=p->y;q->a=q->a+1;}break;}case 77: // right{if (x<47+15*32){p->x = p->x + 32;draw(m,n,d);circle(p->x, p->y, R);g[q->a]=p->x;h[q->a]=p->y;q->a=q->a+1;}break;}default:break;}
}

5.VS的逻辑

void PutChess(Locate*p,player_1*m,player_2*n,sum*d)         //下出棋子
{char ch_1, A;int i;ch_1 = _getch();switch (ch_1){case 69:                                            //大象{if(n->E==0)outtextxy(300,300,"该类棋子已用完");else{A = 'E';C[d->a]='E';outtextxy(p->x, p->y, A);for(i=0;i<14;i++){if(47+a[i]*32==p->x&&47+b[i]*32==p->y){switch(c[i]){case 84:                        //电脑的字母小{m->T=m->T-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 76:                        //电脑的字母小{m->L=m->L-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 87:                        //电脑的字母小{m->W=m->W-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 68:                        //电脑的字母小{m->D=m->D-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 67:                        //电脑的字母小{m->C=m->C-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 77:                        //游戏玩家的字母小{n->E=n->E-1;}break;case 69:{m->E=m->E-1;n->E=n->E-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;default:break;}}}}}break;case 84:                                         //老虎{if(n->T==0)outtextxy(300,300,"该类棋子已用完");else{A = 'T';C[d->a]='T';outtextxy(p->x, p->y, A);for(i=0;i<14;i++){if(47+a[i]*32==p->x&&47+b[i]*32==p->y){switch(c[i]){case 76:                        //电脑的字母小{m->L=m->L-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 87:                        //电脑的字母小{m->W=m->W-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 68:                        //电脑的字母小{m->D=m->D-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 67:                        //电脑的字母小{m->C=m->C-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 77:                        //电脑的字母小{m->M=m->M-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 69:                        //游戏玩家的字母小{n->T=n->T-1;}break;case 84:{m->T=m->T-1;n->T=n->T-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;default:break;}}}}}break;case 76:                                       //狮子{if(n->L==0)outtextxy(300,300,"该类棋子已用完");else{A = 'L';C[d->a]='L';outtextxy(p->x, p->y, A);for(i=0;i<14;i++){if(47+a[i]*32==p->x&&47+b[i]*32==p->y){switch(c[i]){case 87:                        //电脑的字母小{m->W=m->W-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 68:                        //电脑的字母小{m->D=m->D-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 67:                        //电脑的字母小{m->C=m->C-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 77:                        //电脑的字母小{m->M=m->M-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 84:                        //游戏玩家的字母小{n->L=n->L-1;}case 69:                        //游戏玩家的字母小{n->L=n->L-1;}break;case 76:{m->L=m->L-1;n->L=n->L-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;default:break;}}}}}break;case 87:{if(n->W==0)                             //狼outtextxy(300,300,"该类棋子已用完");else{A = 'W';C[d->a]='W';outtextxy(p->x, p->y, A);for(i=0;i<14;i++){if(47+a[i]*32==p->x&&47+b[i]*32==p->y){switch(c[i]){case 68:                        //电脑的字母小{m->D=m->D-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 67:                        //电脑的字母小{m->C=m->C-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 77:                        //电脑的字母小{m->M=m->M-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 76:                        //游戏玩家的字母小{n->W=n->W-1;}break;case 84:                        //游戏玩家的字母小{n->W=n->W-1;}break;case 69:                        //游戏玩家的字母小{n->W=n->W-1;}break;case 87:{m->W=m->W-1;n->W=n->W-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;default:break;}}}}}break;case 68:                                      //狗{if(n->D==0)outtextxy(300,300,"该类棋子已用完");else{A = 'D';C[d->a]='D';outtextxy(p->x, p->y, A);for(i=0;i<14;i++){if(47+a[i]*32==p->x&&47+b[i]*32==p->y){switch(c[i]){case 67:                        //电脑的字母小{m->C=m->C-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 77:                        //电脑的字母小{m->M=m->M-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 87:                        //游戏玩家的字母小{n->D=n->D-1;}break;case 76:                        //游戏玩家的字母小{n->D=n->D-1;}break;case 84:                        //游戏玩家的字母小{n->D=n->D-1;}break;case 69:                        //游戏玩家的字母小{n->D=n->D-1;}break;case 68:{m->D=m->D-1;n->D=n->D-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;default:break;}}}}}break;case 67:                                        //猫{if(n->C==0)outtextxy(300,300,"该类棋子已用完");else{A = 'C';C[d->a]='C';outtextxy(p->x, p->y, A);for(i=0;i<14;i++){if(47+a[i]*32==p->x&&47+b[i]*32==p->y){switch(c[i]){case 77:                        //电脑的字母小{m->M=m->M-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 68:                        //游戏玩家的字母小{n->C=n->C-1;}break;case 87:                        //游戏玩家的字母小{n->C=n->C-1;}break;case 76:                        //游戏玩家的字母小{n->C=n->C-1;}break;case 84:                        //游戏玩家的字母小{n->C=n->C-1;}break;case 69:                        //游戏玩家的字母小{n->C=n->C-1;}break;case 67:{m->C=m->C-1;n->C=n->C-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;default:break;}}}}}break;case 77:                                          //老鼠{if(n->M==0)outtextxy(300,300,"该类棋子已用完");else{A = 'M';C[d->a]='M';outtextxy(p->x, p->y, A);for(i=0;i<14;i++){if(47+a[i]*32==p->x&&47+b[i]*32==p->y){switch(c[i]){case 69:                        //电脑的字母小{m->E=m->E-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;case 67:                        //游戏玩家的字母小{n->M=n->M-1;}break;case 68:                        //游戏玩家的字母小{n->M=n->M-1;}break;case 87:                        //游戏玩家的字母小{n->M=n->M-1;}break;case 76:                        //游戏玩家的字母小{n->M=n->M-1;}break;case 84:                        //游戏玩家的字母小{n->M=n->M-1;}break;case 77:{m->M=m->M-1;n->M=n->M-1;clearcircle(47+a[i]*32,47+b[i]*32,R);e[d->a]=47+a[i]*32;f[d->a]=47+b[i]*32;d->a+=1;}break;default:break;}}}}}break;default:break;}
}

6.页面的布局

void show(player_1*m,player_2*n)
{settextstyle(16,0,"微软黑体");char s[50];sprintf(s,"电脑:E:%d T:%d L:%d W:%d D:%d C:%d M:%d",m->E,m->T,m->L,m->W,m->D,m->C,m->M);outtextxy(10,3,s);char t[50];sprintf(t,"玩家:E:%d T:%d L:%d W:%d D:%d C:%d M:%d",n->E,n->T,n->L,n->W,n->D,n->C,n->M);outtextxy(10,550,t);
}

7.复盘

void FuPan()
{int q;int i;char M[50];printf("输入你要复盘的对局的文件名:");         scanf("%s",&M);FILE*fp;fp=fopen(M,"r");rewind(fp);fscanf(fp,"%d",&q);for(i=0;i<q;i++){fscanf(fp,"%d%d",&h[i],&g[i]);fseek(fp,5L,SEEK_CUR);}fseek(fp,-3L,SEEK_CUR);for(i=0;i<14;i++){fscanf(fp,"%d%d%c",&A[i],&B[i],&C[i]);//fscanf读取时中间不能有空格fseek(fp,1L,SEEK_CUR);}initgraph(600, 600);setbkcolor(WHITE);cleardevice();Draw();settextstyle(16,0,"微软黑体");outtextxy(10,3,"上方字母是你下的棋,下方字母是电脑下的棋");for(i=0;i<14;i++){outtextxy(A[i],B[i],c[i]);outtextxy(A[i],B[i]-13,C[i]);}for(i=0;i<q;i++){setfillcolor(BLACK);circle(h[i],g[i],R);}fclose(fp);
}

可能整体看下来比较繁琐,希望能够抛砖引玉。

动物棋制作(C语言)相关推荐

  1. 动物棋c语言程序,斗兽棋游戏手机版|斗兽棋游戏下载 v0.2C 安卓版_最火软件站...

    斗兽棋android手机版,动物对战棋,回味童年的棋牌休闲游戏,登陆android手机,整个游戏画面是分为两块区域,中间有河流分割两块区域,有桥梁可以让彼此的动物过河,要取得胜利,必须占领那一边动物的 ...

  2. 第一个童年游戏“动物棋,开发及移植到android

    小时候玩"动物棋",简单的16个纸牌动物,玩的不亦乐乎. 长大了,会编程后,就一直想自己做一个游戏. 现在,终于实现愿望了. 这篇文章将详细介绍游戏开发过程和移植到Android的 ...

  3. 【教学类-09-02】20221022《动物棋10*10 S形迷宫》(数字续写和骰子游戏)(大班主题《动物花花衣》)

    效果展示: 背景需求: [教学类-09-01]20221022<动物棋>的排列方式是10*10矩阵(每行都是从小到大升序排列)从游戏棋的角度出发,它并不是一条线连贯的路线.游戏时需要&qu ...

  4. 【教学类-09-01】20221022《动物棋10*10》(数字续写和骰子游戏)(大班主题《动物花花衣》)

    效果样式: 背景需求: [教学类-08]"门牌号"的设计原理是对已有的Word模板内的"数字"进行随机删除,幼儿尝试补全空格上的门牌号.根据这个思路,我把代码进 ...

  5. 自己动手制作一门语言(1)波罗语

    自己动手制作一门语言(1)波罗语 波罗语:基于波斯(阿拉伯语)的繁衍,主要目的是二向加密语言.防止被保护的数据泄露和解密. 使用在计算机与书本中使用 语言的发音 主要以 ah .v .hv 颤音.哈音 ...

  6. 网页制作的基本语言html,网页制作基础语言HTML.ppt

    网页制作基础语言HTML 2. 内嵌音频播放插件 通过内嵌音频播放插件可以在浏览器中出现控制面板,也可作为背景音乐.其格式为: [例2-27] 3. IE中的背景音乐 可以插入背景音乐格式,不过只有在 ...

  7. c语言的菜单制作,C语言的菜单制作.ppt

    C语言的菜单制作 C语言的菜单制作 图形化菜单 要完成一个菜单需要考虑以下几个方面: 菜单的定义 保存部分屏幕 恢复期望的屏幕 用户的响应值传递 如何显示菜单 可以利用输出字符画出主界面上的边框和主菜 ...

  8. 目前网页制作的基本语言html,第二讲网页制作基本语言HTML”.ppt

    第二讲网页制作基本语言HTML" 2. 内嵌音频播放插件 通过内嵌音频播放插件可以在浏览器中出现控制面板,也可作为背景音乐.其格式为: [例2-27] 3. IE中的背景音乐 可以插入背景音 ...

  9. 串口c语言 讲觯,用Powerpoint制作C语言动画课件.pdf

    用Powerpoint制作C语言动画课件.pdf 第17卷第4期 山东轻工业学院学报 v01.17No.4 婴堕!!旦 !!竖坠竺些里竖!竺翌坚型!坚竺!型竺型 一』壁兰竺 用Powerpoint制作 ...

最新文章

  1. NoticeView
  2. 大话软件测试与职业生涯
  3. 随机产生单词java_关于java:如何创建随机单词选择器方法
  4. mysql 任务计划 /etc/cron.d_Linux /etc/cron.d增加定时任务
  5. 蛮力法在求解凸包问题中的应用(JAVA)
  6. 用c语言实现简单的tcp协议,实现一个简单的TCP协议下的C/S
  7. 第三十二章 elk(3)- broker架构 + 引入logback
  8. vim默认设置的配置
  9. android float类型保留两位小数_你知道MySQL中Decimal类型和Float Double的区别吗?
  10. 项目遇到OpenSessionInViewFilter的默认sessionFactoryBeanName的问题
  11. Python数据挖掘-关键字提取
  12. 42表盘直径是从哪测量_爱彼15703和15710区别在哪?背透和密底哪个更好?
  13. 21-7-28 git学习复习
  14. 计算机屏桌面翻页,Fliqlo翻页时钟 v1.51 - 个性化您的电脑桌面
  15. Github全封41万俄罗斯开发者账号,开源真的无国界
  16. html网页制作期末大作业成品_新疆旅游网页设计作品_dreamweaver作业静态HTML网页设计模板_新疆旅游景点网页作业制作...
  17. 外贸人如何在领英linkedin上高效开发客户
  18. 计算机无法识别华为usb设备,华为路由A1插上USB储存设备无法识别怎么办
  19. 墨者学院—Webmin未经身份验证的远程代码执行(简单复习)
  20. [NOI 1997] 积木游戏(dp)

热门文章

  1. 从零搭建韦东山老师一期的Ubuntu环境
  2. 首例 3次IPO:前2次申请科创板、创业板均撤回、第3次改为主板、难圆其说变更保代及券商……
  3. 使用httpClient4.4登录豆瓣,并发表说说
  4. 【Autogluon】傻瓜式深度学习框架
  5. Git扩展工具--GitExtension的安装和配置--2021-8-22
  6. 个人喜欢的歌曲——女生篇
  7. 管理学二(学习与沟通的重要性)
  8. 他做国外LEAD,用了一年时间,把所有房贷都还清了
  9. CCF2020企业非法集资风险预测-季军方案
  10. 华为荣耀总裁刘江峰正式宣告离职