计算机技术基础c语言课程设计 黑白棋游戏.docx

上传人:b****1 文档编号:1753344 上传时间:2023-05-01 格式:DOCX 页数:16 大小:67.91KB
下载 相关 举报
计算机技术基础c语言课程设计 黑白棋游戏.docx_第1页
第1页 / 共16页
计算机技术基础c语言课程设计 黑白棋游戏.docx_第2页
第2页 / 共16页
计算机技术基础c语言课程设计 黑白棋游戏.docx_第3页
第3页 / 共16页
计算机技术基础c语言课程设计 黑白棋游戏.docx_第4页
第4页 / 共16页
计算机技术基础c语言课程设计 黑白棋游戏.docx_第5页
第5页 / 共16页
计算机技术基础c语言课程设计 黑白棋游戏.docx_第6页
第6页 / 共16页
计算机技术基础c语言课程设计 黑白棋游戏.docx_第7页
第7页 / 共16页
计算机技术基础c语言课程设计 黑白棋游戏.docx_第8页
第8页 / 共16页
计算机技术基础c语言课程设计 黑白棋游戏.docx_第9页
第9页 / 共16页
计算机技术基础c语言课程设计 黑白棋游戏.docx_第10页
第10页 / 共16页
计算机技术基础c语言课程设计 黑白棋游戏.docx_第11页
第11页 / 共16页
计算机技术基础c语言课程设计 黑白棋游戏.docx_第12页
第12页 / 共16页
计算机技术基础c语言课程设计 黑白棋游戏.docx_第13页
第13页 / 共16页
计算机技术基础c语言课程设计 黑白棋游戏.docx_第14页
第14页 / 共16页
计算机技术基础c语言课程设计 黑白棋游戏.docx_第15页
第15页 / 共16页
计算机技术基础c语言课程设计 黑白棋游戏.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算机技术基础c语言课程设计 黑白棋游戏.docx

《计算机技术基础c语言课程设计 黑白棋游戏.docx》由会员分享,可在线阅读,更多相关《计算机技术基础c语言课程设计 黑白棋游戏.docx(16页珍藏版)》请在冰点文库上搜索。

计算机技术基础c语言课程设计 黑白棋游戏.docx

计算机技术基础c语言课程设计黑白棋游戏

计算机技术基础课程设计

C语言

设计报告

黑白棋游戏程序

 

一、选题背景:

随着电脑的普及以及人们对C语言的崇拜,用C语言编写一些简单的应用小程序解决实际问题变的越来越容易和方便。

平常学习有点累,就容易迷上网络游戏,所以就编写了一个小黑白棋游戏,闲暇的时候玩玩,既益智又娱乐,又不至于上瘾。

二、设计思想:

运用了C语言的各种语句(如FOR循环语句,IFELSE条件语句等)。

程序设计分三大部分:

第一部分为选择界面,可选择为人机下棋和双人下棋;第二部分为程序运行部分,解决整个程序中的关键问题和算法;第三部分为结束部分,主要是输出文档和设计者的信息。

三.程序流程图:

 

 

四.程序清单:

#include"graphics.h"

#include"stdio.h"

#defineLENsizeof(structdian)

#defineNULL0

intdian[8][8],result[10][2];/*dian[][]中存格子的状态,无子,黑子或白子*/

intN,M,s=0,K=0;

intdx,dy,key;

charCOMPUTER=0;

intcomputer=2;

structdian/*记录所有已经下的子的位置*/

{

intx;

inty;

structdian*next;

};

structdiana,*p1,*p,*head;

voidinit(void)/*初始化*/

{

intgd=DETECT,gm;

initgraph(&gd,&gm,"c:

\\tc");

cleardevice();

}

voidjiemian1(void)/*第一个界面*/

{

setlinestyle(0,0,3);

setcolor(RED);

rectangle(1,1,640,480);

setcolor(BLUE);

rectangle(3,3,638,478);

setcolor(YELLOW);

rectangle(5,5,636,476);

settextstyle(0,0,6);

setcolor(WHITE);

outtextxy(160,160,"HEIBAI");

settextstyle(0,0,1);

setcolor(BLUE);

outtextxy(210,280,"press1toplaywithcomputer");

outtextxy(210,320,"press2toplaywithanother");

 

do{/*选择是和人玩还是和电脑下去*/

COMPUTER=bioskey(0);

}while(COMPUTER!

='1'&&COMPUTER!

='2');

cleardevice();

}

voidqipan(void)/*画棋盘*/

{

inti;

setlinestyle(0,0,3);

setcolor(9);

for(i=0;i<=160;i+=20)

{

line(240,i+160,400,i+160);

line(i+240,160,i+240,320);

}

}

voidinsert(intx,inty)/*将下子的位置插入链表*/

{

structdian*p2;

p2=(structdian*)malloc(LEN);

p2->x=x;p2->y=y;

p1->next=p2;

p2->next=NULL;

p1=p2;

}

voidpaint(intx,inty,intt)/*画棋子*/

{

setcolor(t);

setlinestyle(0,0,1);

circle(20*x+250,20*y+170,8);

setfillstyle(SOLID_FILL,t);

floodfill(20*x+250,20*y+170,t);

}

voidjiemian2(void)/*下棋的界面*/

{

inti,j;

for(i=0;i<8;i++)

for(j=0;j<8;j++)

dian[i][j]=1;

 

setcolor(8);

rectangle(236,156,404,324);

setfillstyle(SOLID_FILL,6);

bar(238,158,402,322);

setcolor(3);

rectangle(8,8,160,378);

bar(10,10,158,376);

settextstyle(0,0,1);

outtextxy(20,20,"LEFT:

change");

outtextxy(20,50,"RIGHT:

change");

outtextxy(20,80,"ENTER:

play");

outtextxy(20,110,"ESC:

leave");

setcolor(RED);

outtextxy(20,200,"anythingwrong?

");

outtextxy(40,220,"E-mailme:

");

outtextxy(12,245,"renren3052@");

qipan();

a.x=3;a.y=3;a.next=NULL;dian[3][3]=0;/*刚开局时候棋盘上的四个棋子*/

p=head=&a;p1=&a;

paint(3,3,0);

insert(3,4);paint(3,4,7);dian[3][4]=7;

insert(4,3);paint(4,3,7);dian[4][3]=7;

insert(4,4);paint(4,4,0);dian[4][4]=0;

}

voidshine(intx,inty,intt)/*棋子闪烁*/

{

staticinti=0,j=0;

if(i==x&&j==y)return0;

do{

paint(x,y,t);

delay(50000);

paint(x,y,6);

delay(50000);

}while(!

kbhit());

key=bioskey(0);

i=x;j=y;

}

voidscan(intx,inty,intt)/*查找可以下子的位置或是要变颜色的棋子*/

{

 

intb,c,d,e,i,j,m,n,r;

K=0;

if(dian[x][y]==1)r=1;

elser=t;

b=x-1;c=x+1;d=y-1;e=y+1;

if(b<0)b=0;/*查一个子如黑子四周格子的情况,有可能出边界,把边界限制一下*/

if(c>7)c=7;

if(d<0)d=0;

if(e>7)e=7;

for(i=b;i<=c;i++)

for(j=d;j<=e;j++)

{

if(dian[i][j]==t||dian[i][j]==1)continue;

dx=i-x;dy=j-y;m=i;n=j;

while(dian[m][n]==s){m+=dx;n+=dy;}

if(dian[m][n]==r)continue;

if(m<0||m>7||n<0||n>7)continue;

result[K][0]=m;result[K][1]=n;

K++;

}

}

voidvary(intx,inty,intt)/*下子,插入链表,查找并改变需要改变颜色的棋子*/

{

inti,m,n;

if(t==0)N+=1;

elseM+=1;

paint(x,y,t);

insert(x,y);

scan(x,y,t);

dian[x][y]=t;

for(i=0;i

{

dx=result[i][0]-x;

dy=result[i][1]-y;

if(dx==0)dx=0;

elsedx=dx/abs(dx);

if(dy==0)dy=0;

elsedy=dy/abs(dy);

m=x;n=y;m+=dx;n+=dy;

 

do{

if(t==0){N++;M--;}

else{M++;N--;}

paint(m,n,t);

dian[m][n]=t;

m+=dx;n+=dy;

}while(dian[m][n]!

=t);

}

}

voidpresskey(intt)/*按键*/

{

inti;

for(i=0;i

{

if(computer)/*如果和电脑下并且这一步不是电脑下*/

do{

shine(result[i][0],result[i][1],t);/*闪烁棋子*/

}while(key!

=0x4b00&&key!

=0x4d00&&key!

=0x1c0d&&key!

=0x011b);/*如果没有按键继续闪烁*/

if(computer==0)

{

srand(time(NULL));/*电脑下棋随机选择下哪个位置*/

i=rand()%K;

}

if(computer==0||key==0x1c0d)

{

vary(result[i][0],result[i][1],t);break;

}

if(key==0x011b)exit(0);/*如果按ESC离开游戏*/

}

}

voidrun(intt)/*游戏运行*/

{

inti;

if(t==0)s=7;

if(t==7)s=0;

a:

p=head;

do{

if(dian[p->x][p->y]==s)continue;

 

scan(p->x,p->y,t);/*查找可以下子的地方并存在result数组中*/

if(K==0)continue;

presskey(t);

if(computer==0||key==0x1c0d)break;

}while((p=p->next)!

=NULL);

if(key==0x4b00||key==0x4d00)gotoa;

}

voidscore(void)/*显示分数*/

{

charstr1[4],str2[4];

setlinestyle(SOLID_LINE,0,THICK_WIDTH);

setcolor(3);

rectangle(4,4,636,476);

setcolor(4);

rectangle(6,6,634,474);

setfillstyle(SOLID_FILL,YELLOW);

rectangle(8,380,632,472);

setcolor(9);

rectangle(10,382,630,470);

bar(12,384,628,468);

settextstyle(0,0,2);

setcolor(6);

outtextxy(280,400,"score");

sprintf(str1,"%d",N);

sprintf(str2,"%d",M);

outtextxy(120,430,"PLAYER1");

outtextxy(260,430,str1);

outtextxy(300,430,":

");

outtextxy(330,430,str2);

if(COMPUTER=='1')outtextxy(390,430,"COMPUTER");

elseouttextxy(390,430,"PLAYER2");

}

voidwiner(void)/*胜利显示*/

{

settextstyle(0,0,4);

setcolor(9);

if(N>M)outtextxy(200,50,"player1win!

");

elseif(N

");

elseouttextxy(200,50,"nowiner!

");

 

}

voidsoundG(void)/*结束声音*特色哦!

**/

{

inti;

for(i=20;i<=1000;i++)

{

sound(i);

delay(1500);

nosound();

}

}

voidcloseG()/*游戏结束*/

{

inti;

cleardevice();

settextstyle(1,0,6);

setcolor(YELLOW);

outtextxy(25,180,"Thankstomyteacher!

");

for(i=0;i<=1000;i++)

{

delay(1500);

}

cleardevice();

settextstyle(1,0,5);

setcolor(WHITE);

outtextxy(120,50,"ProgrammeDesiged:

");

outtextxy(230,120,"XiaoWen");

outtextxy(35,250,"E-mail:

renren3052@");

outtextxy(190,330,"QQ:

574973988");

outtextxy(228,410,"2007.01.01");

getch();

closegraph();

}

main()

{inti;

init();

jiemian1();

cleardevice();

N=2;M=2;

 

jiemian2();

do{

if(COMPUTER=='1')

{

if(s==0)computer=1;

elsecomputer=0;

}

score();

run(s);

}while(N+M!

=64||N==0||M==0);

score();

winer();

settextstyle(0,0,1);

outtextxy(310,95,"Doyoulikeit?

");

outtextxy(260,125,"Iamxiaowen.From050606");

soundG();

closeG();

}

 

五.主要解决问题的方法及技术关键:

1.主要解决问题:

用各种语句实现棋盘函数,下子位置链表插入函数,画棋子函数,下棋界面函数,棋子闪烁函数,下子位置函数,按键函数,运行函数,显示分数函数,胜负函数,声音函数等。

2.技术关键:

调用了graphics.h函数,使界面更生动。

利用if,for等语句实现了键盘方向控制。

使用子函数调用,使程序模块化,易于理解。

六.总结、设计结果说明:

1.设计优点:

本程序简单明了,只是利用简单的语句解决问题。

例如在调用下子运行的函数时,利用了很多的for循环和if语句。

而且,运行出的结程序有各种颜色的显示,又有声音,令人心旷神怡。

 2.设计不足:

该程序有点冗长,有些语句不够简洁。

对于程序冗长,需要继续改进,及循环的集中,对于功能不够强大,是由于现在能力限制,时间仓促,等以后多学了响应的知识,力求将程序趋于完美。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2