记忆游戏
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
#define N 10
int main( )
{int i,k,n,a[N],b[N],f=0
srand(time(NULL))
printf(" 按1开始\n 按0退出:_")
scanf("%d",&n)
system("cls")
while(n!=0)
{for(k=0k<Nk++)a[k] = rand( )%N
printf("\n\t\t[请您牢记看到颜色的顺序]\n\n")
for(k=0k<Nk++)
{switch(a[k])
{case 0:system("color 90")printf(" 0:淡蓝色\n")break //淡蓝色
case 1:system("color f0")printf(" 1:白色\n")break //白色
case 2:system("color c0")printf(" 2:淡红色\n")break //淡红色
case 3: system("color d0")printf(" 3:淡紫色\n")break //淡紫色
case 4: system("color 80")printf(" 4:灰色\n") break //灰色
case 5: system("color e0")printf(" 5:黄色\n")break //黄色
case 6: system("color 10")printf(" 6:蓝色\n") break //蓝色
case 7: system("color 20")printf(" 7:绿色\n")break //绿色
case 8: system("color 30")printf(" 8:浅绿色\n")break //浅绿色
case 9: system("color 40")printf(" 9:红色\n")break //红色
}
Sleep(1500)
system("color f") //单个控制 文字颜色
Sleep(100)
}
system("cls")
printf(" 0:淡蓝色,1:白色,2:淡红色,3:淡紫色,4:灰色,5:黄色,6:蓝色7:绿色,8:浅绿色,9:红色\n")
printf("\n\t请输入颜色的顺序:")
for(k=0k<Nk++)scanf("%d",&b[k])
for(k=0k<Nk++)if(a[k] == b[k]) f++
if(f==0) printf(" 你的记忆弱爆了0\n")
else if(f==1) printf(" 你的记忆有点弱1\n")
else if(f<5) printf(" 你的记忆一般<5\n")
else printf(" 你的记忆力很强!\n")
Sleep(2000)
system("cls")
printf("\t\t按0退出\n\t\t按任意键继续游戏:\n")
scanf("%d",&n)
system("cls")
}
return 0
}
注:DEVc++运行通过,每输入一个数字要加入一个空格。
"扫雷"小游戏C代码
#include<stdio.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
main( )
{char a[102][102],b[102][102],c[102][102],w
int i,j /*循环变量*/
int x,y,z[999] /*雷的位置*/
int t,s /*标记*/
int m,n,lei /*计数*/
int u,v /*输入*/
int hang,lie,ge,mo /*自定义变量*/
srand((int)time(NULL)) /*启动随机数发生器*/
leb1: /*选择模式*/
printf("\n 请选择模式:\n 1.标准 2.自定义\n")
scanf("%d",&mo)
if(mo==2) /*若选择自定义模式,要输入三个参数*/
{do
{t=0printf("请输入\n行数 列数 雷的个数\n")
scanf("%d%d%d",&hang,&lie,&ge)
if(hang<2){printf("行数太少\n")t=1}
if(hang>100){printf("行数太多\n")t=1}
if(lie<2){printf("列数太少\n")t=1}
if(lie>100){printf("列数太多\n")t=1}
if(ge<1){printf("至少要有一个雷\n")t=1}
if(ge>=(hang*lie)){printf("雷太多了\n")t=1}
}while(t==1)
}
else{hang=10,lie=10,ge=10} /*否则就是选择了标准模式(默认参数)*/
for(i=1i<=gei=i+1) /*确定雷的位置*/
{do
{t=0z[i]=rand( )%(hang*lie)
for(j=1j<ij=j+1){if(z[i]==z[j]) t=1}
}while(t==1)
}
for(i=0i<=hang+1i=i+1) /*初始化a,b,c*/
{for(j=0j<=lie+1j=j+1) {a[i][j]='1'b[i][j]='1'c[i][j]='0'} }
for(i=1i<=hangi=i+1)
{for(j=1j<=liej=j+1) {a[i][j]='+'} }
for(i=1i<=gei=i+1) /*把雷放入c*/
{x=z[i]/lie+1y=z[i]%lie+1c[x][y]='#'}
for(i=1i<=hangi=i+1) /*计算b中数字*/
{for(j=1j<=liej=j+1)
{m=48
if(c[i-1][j-1]=='#')m=m+1if(c[i][j-1]=='#')m=m+1
if(c[i-1][j]=='#')m=m+1 if(c[i+1][j+1]=='#')m=m+1
if(c[i][j+1]=='#')m=m+1 if(c[i+1][j]=='#')m=m+1
if(c[i+1][j-1]=='#')m=m+1if(c[i-1][j+1]=='#')m=m+1
b[i][j]=m
}
}
for(i=1i<=gei=i+1) /*把雷放入b中*/
{x=z[i]/lie+1y=z[i]%lie+1b[x][y]='#'}
lei=ge /*以下是游戏设计*/
do
{leb2: /*输出*/
system("cls")printf("\n\n\n\n")
printf(" ")
for(i=1i<=liei=i+1)
{w=(i-1)/10+48printf("%c",w)
w=(i-1)%10+48printf("%c ",w)
}
printf("\n |")
for(i=1i<=liei=i+1){printf("---|")}
printf("\n")
for(i=1i<=hangi=i+1)
{w=(i-1)/10+48printf("%c",w)
w=(i-1)%10+48printf("%c |",w)
for(j=1j<=liej=j+1)
{if(a[i][j]=='0')printf(" |")
else printf(" %c |",a[i][j])
}
if(i==2)printf(" 剩余雷个数")
if(i==3)printf(" %d",lei)
printf("\n |")
for(j=1j<=liej=j+1){printf("---|")}
printf("\n")
}
scanf("%d%c%d",&u,&w,&v) /*输入*/
u=u+1,v=v+1
if(w!='#'&&a[u][v]=='@')
goto leb2
if(w=='#')
{if(a[u][v]=='+'){a[u][v]='@'lei=lei-1}
else if(a[u][v]=='@'){a[u][v]='?'lei=lei+1}
else if(a[u][v]=='?'){a[u][v]='+'}
goto leb2
}
a[u][v]=b[u][v]
leb3: /*打开0区*/
t=0
if(a[u][v]=='0')
{for(i=1i<=hangi=i+1)
{for(j=1j<=liej=j+1)
{s=0
if(a[i-1][j-1]=='0')s=1if(a[i-1][j+1]=='0')s=1
if(a[i-1][j]=='0')s=1 if(a[i+1][j-1]=='0')s=1
if(a[i+1][j+1]=='0')s=1if(a[i+1][j]=='0')s=1
if(a[i][j-1]=='0')s=1 if(a[i][j+1]=='0')s=1
if(s==1)a[i][j]=b[i][j]
}
}
for(i=1i<=hangi=i+1)
{for(j=liej>=1j=j-1)
{s=0
if(a[i-1][j-1]=='0')s=1if(a[i-1][j+1]=='0')s=1
if(a[i-1][j]=='0')s=1 if(a[i+1][j-1]=='0')s=1
if(a[i+1][j+1]=='0')s=1if(a[i+1][j]=='0')s=1
if(a[i][j-1]=='0')s=1 if(a[i][j+1]=='0')s=1
if(s==1)a[i][j]=b[i][j]
}
}
for(i=hangi>=1i=i-1)
{for(j=1j<=liej=j+1)
{s=0
if(a[i-1][j-1]=='0')s=1if(a[i-1][j+1]=='0')s=1
if(a[i-1][j]=='0')s=1 if(a[i+1][j-1]=='0')s=1
if(a[i+1][j+1]=='0')s=1if(a[i+1][j]=='0')s=1
if(a[i][j-1]=='0')s=1 if(a[i][j+1]=='0')s=1
if(s==1)a[i][j]=b[i][j]
}
}
for(i=hangi>=1i=i-1)
{for(j=liej>=1j=j-1)
{s=0
if(a[i-1][j-1]=='0')s=1if(a[i-1][j+1]=='0')s=1
if(a[i-1][j]=='0')s=1 if(a[i+1][j-1]=='0')s=1
if(a[i+1][j+1]=='0')s=1if(a[i+1][j]=='0')s=1
if(a[i][j-1]=='0')s=1 if(a[i][j+1]=='0')s=1
if(s==1)a[i][j]=b[i][j]
}
}
for(i=1i<=hangi=i+1) /*检测0区*/
{for(j=1j<=liej=j+1)
{if(a[i][j]=='0')
{if(a[i-1][j-1]=='+'||a[i-1][j-1]=='@'||a[i-1][j-1]=='?')t=1
if(a[i-1][j+1]=='+'||a[i-1][j+1]=='@'||a[i-1][j+1]=='?')t=1
if(a[i+1][j-1]=='+'||a[i+1][j-1]=='@'||a[i+1][j-1]=='?')t=1
if(a[i+1][j+1]=='+'||a[i+1][j+1]=='@'||a[i+1][j+1]=='?')t=1
if(a[i+1][j]=='+'||a[i+1][j]=='@'||a[i+1][j]=='?')t=1
if(a[i][j+1]=='+'||a[i][j+1]=='@'||a[i][j+1]=='?')t=1
if(a[i][j-1]=='+'||a[i][j-1]=='@'||a[i][j-1]=='?')t=1
if(a[i-1][j]=='+'||a[i-1][j]=='@'||a[i-1][j]=='?')t=1
}
}
}
if(t==1)goto leb3
}
n=0 /*检查结束*/
for(i=1i<=hangi=i+1)
{for(j=1j<=liej=j+1)
{if(a[i][j]!='+'&&a[i][j]!='@'&&a[i][j]!='?')n=n+1}
}
}
while(a[u][v]!='#'&&n!=(hang*lie-ge))
for(i=1i<=gei=i+1) /*游戏结束*/
{x=z[i]/lie+1y=z[i]%lie+1a[x][y]='#'}
printf(" ")
for(i=1i<=liei=i+1)
{w=(i-1)/10+48printf("%c",w)
w=(i-1)%10+48printf("%c ",w)
}
printf("\n |")
for(i=1i<=liei=i+1){printf("---|")}
printf("\n")
for(i=1i<=hangi=i+1)
{w=(i-1)/10+48printf("%c",w)
w=(i-1)%10+48printf("%c |",w)
for(j=1j<=liej=j+1)
{if(a[i][j]=='0')printf(" |")
else printf(" %c |",a[i][j])
}
if(i==2)printf(" 剩余雷个数")
if(i==3)printf(" %d",lei)printf("\n |")
for(j=1j<=liej=j+1) {printf("---|")}
printf("\n")
}
if(n==(hang*lie-ge)) printf("你成功了!\n")
else printf(" 游戏结束!\n")
printf(" 重玩请输入1\n")
t=0
scanf("%d",&t)
if(t==1)goto leb1
}
/*注:在DEV c++上运行通过。行号和列号都从0开始,比如要确定第0行第9列不是“雷”,就在0和9中间加入一个字母,可以输入【0a9】三个字符再按回车键。3行7列不是雷,则输入【3a7】回车;第8行第5列是雷,就输入【8#5】回车,9行0列是雷则输入【9#0】并回车*/
我的楼主可以自己玩一下试试吧
#define N 200
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
int i,key
int score=0/*得分*/
int gamespeed=50000/*游戏速度自己调整*/
struct Food
{
int x/*食物的横坐标*/
int y/*食物的纵坐标*/
int yes/*判断是否要出现食物的变量*/
}food/*食物的结构体*/
struct Snake
{
int x[N]
int y[N]
int node/*蛇的节数*/
int direction/*蛇移动方向*/
int life/* 蛇的生命,0活着,1死亡*/
}snake
void Init(void)/*图形驱动*/
void Close(void)/*图形结束*/
void DrawK(void)/*开始画面*/
void GameOver(void)/*结束游戏*/
void GamePlay(void)/*玩游戏具体过程*/
void PrScore(void)/*输出成绩*/
/*主函数*/
void main(void)
{
Init()/*图形驱动*/
DrawK()/*开始画面*/
GamePlay()/*玩游戏具体过程*/
Close()/*图形结束*/
}
/*图形驱动*/
void Init(void)
{
int gd=DETECT,gm
initgraph(&gd,&gm,"c:\\tc")
cleardevice()
}
/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/
void DrawK(void)
{
/*setbkcolor(LIGHTGREEN)*/
setcolor(11)
setlinestyle(SOLID_LINE,0,THICK_WIDTH)/*设置线型*/
for(i=50i<=600i+=10)/*画围墙*/
{
rectangle(i,40,i+10,49)/*上边*/
rectangle(i,451,i+10,460)/*下边*/
}
for(i=40i<=450i+=10)
{
rectangle(50,i,59,i+10)/*左边*/
rectangle(601,i,610,i+10)/*右边*/
}
}
/*玩游戏具体过程*/
void GamePlay(void)
{
randomize()/*随机数发生器*/
food.yes=1/*1表示需要出现新食物,0表示已经存在食物*/
snake.life=0/*活着*/
snake.direction=1/*方向往右*/
snake.x[0]=100snake.y[0]=100/*蛇头*/
snake.x[1]=110snake.y[1]=100
snake.node=2/*节数*/
PrScore()/*输出得分*/
while(1)/*可以重复玩游戏,压ESC键结束*/
{
while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/
{
if(food.yes==1)/*需要出现新食物*/
{
food.x=rand()%400+60
food.y=rand()%350+60
while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/
food.x++
while(food.y%10!=0)
food.y++
food.yes=0/*画面上有食物了*/
}
if(food.yes==0)/*画面上有食物了就要显示*/
{
setcolor(GREEN)
rectangle(food.x,food.y,food.x+10,food.y-10)
}
for(i=snake.node-1i>0i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/
{
snake.x[i]=snake.x[i-1]
snake.y[i]=snake.y[i-1]
}
/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/
switch(snake.direction)
{
case 1:snake.x[0]+=10break
case 2: snake.x[0]-=10break
case 3: snake.y[0]-=10break
case 4: snake.y[0]+=10break
}
for(i=3i<snake.nodei++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/
{
if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])
{
GameOver()/*显示失败*/
snake.life=1
break
}
}
if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||
snake.y[0]>455)/*蛇是否撞到墙壁*/
{
GameOver()/*本次游戏结束*/
snake.life=1/*蛇死*/
}
if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/
break
if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/
{
setcolor(0)/*把画面上的食物东西去掉*/
rectangle(food.x,food.y,food.x+10,food.y-10)
snake.x[snake.node]=-20snake.y[snake.node]=-20
/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/
snake.node++/*蛇的身体长一节*/
food.yes=1/*画面上需要出现新的食物*/
score+=10
PrScore()/*输出新得分*/
}
setcolor(4)/*画出蛇*/
for(i=0i<snake.nodei++)
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,
snake.y[i]-10)
delay(gamespeed)
setcolor(0)/*用黑色去除蛇的的最后一节*/
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],
snake.x[snake.node-1]+10,snake.y[snake.node-1]-10)
} /*endwhile(!kbhit)*/
if(snake.life==1)/*如果蛇死就跳出循环*/
break
key=bioskey(0)/*接收按键*/
if(key==ESC)/*按ESC键退出*/
break
else
if(key==UP&&snake.direction!=4)
/*判断是否往相反的方向移动*/
snake.direction=3
else
if(key==RIGHT&&snake.direction!=2)
snake.direction=1
else
if(key==LEFT&&snake.direction!=1)
snake.direction=2
else
if(key==DOWN&&snake.direction!=3)
snake.direction=4
}/*endwhile(1)*/
}
/*游戏结束*/
void GameOver(void)
{
cleardevice()
PrScore()
setcolor(RED)
settextstyle(0,0,4)
outtextxy(200,200,"GAME OVER")
getch()
}
/*输出成绩*/
void PrScore(void)
{
char str[10]
setfillstyle(SOLID_FILL,YELLOW)
bar(50,15,220,35)
setcolor(6)
settextstyle(0,0,2)
sprintf(str,"score:%d",score)
outtextxy(55,20,str)
}
/*图形结束*/
void Close(void)
{
getch()
closegraph()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)