/*图形模式下的推箱子*/
#define MAX 2 /*游戏中总关数*/
#define STARTX 180
#define STARTY80
#define BKCOLOR BLACK
#define MANCOLOR RED
#define OBJECTCOLOR YELLOW
#define TIMEINT 2
#define STARNUM 300
#define STEPMAX 5
#include<string.h>
#include<bios.h>
#include<stdio.h>
#include<dos.h>
#include<graphics.h>
#include<conio.h>
#include<time.h>
#include<stdlib.h>
#include<stdio.h>
#define Key_R 0x1372
#define Key_Up 0x4800
#define Key_Enter 0x1c0d
#define Key_Down 0x5000
#define Key_P 0x1970
#define Key_Esc 0x11b
#define Key_Right 0x4d00
#define Key_Left 0x4b00
typedef struct star
{
int x
int y
int c
}Star
Star s[STARNUM]
typedef struct record
{
char name[20]
int second
struct time t
struct date d
}Record
Record r[MAX]
typedef struct c
{
int x
int y
}Add
typedef struct a
{
int x
int y
}Player
Player p
char name[20]/*进入游戏时记录玩家的姓名*/
time_t t1,t2 /*游戏结束时的时间*/
int Ide /*开始进入游戏时,选择菜单禅悉基时返的功能号(1,2,3)*/
int MissionNum /*玩家正在玩的关数*/
int BoxNum /*目的地的贺谨个数*/
int Key /*玩家按键*/
int map[10][10] /*地图.(空=0),(人=1),(箱子=2),(墙陆斗=3),(目的地=4),(人+目的地=5),(箱子+目的地=6)*/
int StepNum
int DirectionKey /*用来表示方向键最后一次按键*/
int BoxMove[STEPMAX]
int Step[STEPMAX]
/*函数定义*/
void InputName()
void Init()
void MainMenu()
void JudgeRecord()
void WriteRecord()
void JudgeIde()
void DrawMenu(int )
void Game()
void InitMission(int )
void NextMission()
void InitPic(int ,int ,int )
int Move(Add )
void DrawWall(int ,int )
void DrawBack(int ,int )
void DrawBox(int ,int )
void DrawObject(int ,int )
void DrawMan(int ,int )
void DrawStar()
int JudgeWin()
void InitMission1()
void InitMission2()
int TimeCome()
void ChangeStar()
void InputName()
void ViewRecords()
void DeleteRecords()
void RegisterStep()
void ReverselyMove()
void MoveBack(Add )
void main()
{
InputName()
Init() /*驱动显卡*/
srand(time(&t1))
MainMenu() /*画开始菜单(1.start game 2.view records 3.delete records 4.exit game)*/
}
void InputName()
{
char b
char c
do
{
printf("\n\nPlease input your password:")
scanf("%s",&b)
}while(b!='l')
clrscr()
do
{
printf("\n\nPlease input your name:")
scanf("%s",name)
printf("Are you sure the name right(Y/N):")
do
{
c=getch()
}while(c!='Y'&&c!='y'&&c!='N'&&c!='n')
}while(c!='Y'&&c!='y')
}
void Init()
{
int gd=DETECT,gm
initgraph(&gd,&gm,"d:\\tc")
}
void MainMenu()
{
setbkcolor(BKCOLOR)
cleardevice()
DrawStar() /*画开始菜单的背景画面*/
DrawStar()
Ide=0,Key=0
DrawMenu(Ide)
do
{
if(bioskey(1)) /*有键按下则处理按键*/
{
Key=bioskey(0)
switch(Key)
{
case Key_Down: {Ide++Ide=Ide%4DrawMenu(Ide)break}
case Key_Up:{Ide--Ide=(Ide+4)%4DrawMenu(Ide)break}
}
}
else {if(TimeCome()) ChangeStar()}/*改变背景*/
}while(Key!=Key_Enter)
JudgeIde()/*根据Ide运行不同的程序*/
}
void JudgeIde()
{
switch(Ide)
{
case 0:Game()break
case 1:{ViewRecords()bioskey(0)MainMenu()break}
case 2:{DeleteRecords()ViewRecords()bioskey(0)MainMenu()break}
case 3:exit(0)
}
}
void Game()
{
int i,j,flag
Add ad
MissionNum=0
NextMission()
do
{
flag=0
Key=bioskey(0)
switch(Key)
{
case Key_Enter:{NextMission()time(&t1)break}
case Key_Up:{ad.x=-1ad.y=0flag=1DirectionKey=Keybreak}
case Key_Down:{ad.x=1ad.y=0flag=1DirectionKey=Keybreak}
case Key_Left:{ad.x=0ad.y=-1flag=1DirectionKey=Keybreak}
case Key_Right:{ad.x=0ad.y=1flag=1DirectionKey=Keybreak}
case Key_R:{MissionNum--NextMission()break}
case Key_Esc:{MainMenu()break}
case Key_P:{ReverselyMove()break}
}
if(flag==1)
{if(Move(ad)) {RegisterStep()if(JudgeWin()) {JudgeRecord()NextMission()}}}
}while(1)
}
void InitMission(int n)
{
int i,j
for(i=0i<10i++)
for(j=0j<10j++)
map[i][j]=0
switch(n)
{
case 1:InitMission1()break /*第一关*/
case 2:InitMission2()break /*第二关*/
}
}
void InitPic(int n,int i,int j)
{
switch(n)
{
case 0:DrawBack(i,j)break
case 1:DrawMan(i,j)break
case 2:DrawBox(i,j)break
case 3:DrawWall(i,j)break
case 4:DrawObject(i,j)break
case 5:DrawMan(i,j)break
case 6:DrawBox(i,j)break
}
}
void NextMission()
{
int i,j
if(MissionNum+1>MAX) MissionNum=1
else MissionNum++
InitMission(MissionNum)
setbkcolor(BKCOLOR)
cleardevice()
for(i=0i<10i++)
for(j=0j<10j++)
InitPic(map[i][j],i,j)
switch(MissionNum)
{
case 1:outtextxy(200,230,"Mission 1")break
case 2:outtextxy(200,230,"Mission 2")break
}
time(&t1)
for(i=0i<STEPMAXi++)
{Step[i]=BoxMove[i]=0}
StepNum=0
}
int Move(Add a)
{
int flag
int i=StepNum%STEPMAX
switch(map[p.x+a.x][p.y+a.y]) /*看下一位置为什么*/
{
case 0:{map[p.x][p.y]-=1InitPic(map[p.x][p.y],p.x,p.y)
p.x=p.x+a.xp.y=p.y+a.y
map[p.x][p.y]+=1InitPic(map[p.x][p.y],p.x,p.y)flag=1break}
case 2:{if(map[p.x+2*a.x][p.y+2*a.y]==0||map[p.x+2*a.x][p.y+2*a.y]==4)
{map[p.x][p.y]-=1map[p.x+a.x][p.y+a.y]=1map[p.x+2*a.x][p.y+2*a.y]+=2
InitPic(map[p.x][p.y],p.x,p.y)
InitPic(map[p.x+a.x][p.y+a.y],p.x+a.x,p.y+a.y)
InitPic(map[p.x+2*a.x][p.y+2*a.y],p.x+2*a.x,p.y+2*a.y)
p.x=p.x+a.xp.y=p.y+a.yflag=1BoxMove[i]=1}
else flag=0
break}
case 3:flag=0break
case 4:{map[p.x][p.y]-=1InitPic(map[p.x][p.y],p.x,p.y)
p.x=p.x+a.xp.y=p.y+a.y
map[p.x][p.y]+=1InitPic(map[p.x][p.y],p.x,p.y)flag=1break}
case 6:{if(map[p.x+2*a.x][p.y+2*a.y]==0||map[p.x+2*a.x][p.y+2*a.y]==4)
{map[p.x][p.y]-=1map[p.x+a.x][p.y+a.y]=5map[p.x+2*a.x][p.y+2*a.y]+=2
InitPic(map[p.x][p.y],p.x,p.y)
InitPic(map[p.x+a.x][p.y+a.y],p.x+a.x,p.y+a.y)
InitPic(map[p.x+2*a.x][p.y+2*a.y],p.x+2*a.x,p.y+2*a.y)
p.x=p.x+a.xp.y=p.y+a.yflag=1BoxMove[i]=1}
else flag=0
break}
}
return flag
}
void DrawWall(int i,int j)
{
DrawBack(i,j)
setfillstyle(9,1)
bar(STARTX+20*j-9,STARTY+20*i-9,STARTX+20*j+9,STARTY+20*i+9)
}
void DrawMan(int i,int j)
{
DrawBack(i,j)
setcolor(MANCOLOR)
circle(STARTX+20*j,STARTY+20*i,9)
arc(STARTX+20*j-3,STARTY+20*i-2,20,160,3)
arc(STARTX+20*j+4,STARTY+20*i-2,20,160,3)
arc(STARTX+20*j,STARTY+20*i-2,220,320,7)
}
void DrawBack(int i,int j)
{
setfillstyle(1,BKCOLOR)
bar(STARTX+20*j-9,STARTY+20*i-9,STARTX+20*j+9,STARTY+20*i+9)
}
void DrawObject(int i,int j)
{
DrawBack(i,j)
setcolor(OBJECTCOLOR)
line(STARTX+20*j-9,STARTY+20*i,STARTX+20*j+9,STARTY+20*i)
line(STARTX+20*j-9,STARTY+20*i-9,STARTX+20*j+9,STARTY+20*i+9)
line(STARTX+20*j-9,STARTY+20*i+9,STARTX+20*j+9,STARTY+20*i-9)
}
void DrawBox(int i,int j)
{
DrawBack(i,j)
setfillstyle(9,3)
bar(STARTX+20*j-9,STARTY+20*i-9,STARTX+20*j+9,STARTY+20*i+9)
}
void DrawMenu(int j)
{
int n
char *s[4]={"1.Start Game","2.View Records","3.Delete Records","4.Exit Game"}
settextstyle(0,0,1)
setcolor(GREEN)
for(n=0n<4n++)
outtextxy(250,170+n*20,s[n])
setcolor(RED)
outtextxy(250,170+j*20,s[j])
}
void DrawStar()
{
int w,h,i,dotx,doty,color,maxcolor
w=getmaxx()
h=getmaxy()
maxcolor=getmaxcolor()
for(i=0i<STARNUMi++)
{
s[i].x=1+random(w-1)
s[i].y=1+random(h-1)
s[i].c=random(maxcolor)
putpixel(s[i].x,s[i].y,s[i].c)
}
}
void ChangeStar()
{
int i,maxcolor
maxcolor=getmaxcolor()
for(i=0i<STARNUMi++)
{
s[i].c=random(maxcolor)
putpixel(s[i].x,s[i].y,s[i].c)
}
}
int TimeCome()
{
static long tm, old
tm=biostime(0,tm)
if(tm-old<TIMEINT) return 0
else
{
old=tmreturn 1
}
}
int JudgeWin()
{
int n=0,i,j
for(i=0i<10i++)
for(j=0j<10j++)
if(map[i][j]==6) n++
if(n==BoxNum) return 1
else return 0
}
void InitMission1() /*第九关*/
{
int i,j
for(i=0i<10i++)
for(j=0j<10j++)
map[i][j]=0
for(i=0i<=5i++)
map[0][i]=3
for(i=5i<=7i++)
{map[2][i]=map[i-1][1]=3}
for(i=1i<=4i++)
{map[6][i]=map[5][i+3]=map[i][0]=3}
map[3][7]=map[4][7]=map[1][5]=3
for(i=2i<=4i++)
map[2][i]=2
map[3][4]=map[4][5]=2
for(i=2i<=3i++)
{map[3][i]=map[4][i]=4}
map[4][4]=4
p.x=3p.y=5
map[3][5]=1
BoxNum=5
}
void InitMission2()
{
int i,j
for(i=0i<10i++)
for(j=0j<10j++)
map[i][j]=0
for(i=1i<=5i++)
{map[0][i]=map[6][i]=3}
for(i=2i<=4i++)
{map[1][i+3]=map[i][7]=map[i+2][5]=map[i][0]=3}
map[1][1]=map[2][1]=map[5][0]=map[5][5]=map[4][6]=map[6][0]=3
map[2][4]=map[3][3]=map[4][2]=map[4][3]=2
map[2][3]=map[3][2]=map[3][4]=map[4][4]=4
p.x=1p.y=3
map[1][3]=1
BoxNum=4
}
void ViewRecords()
{
FILE *fp
int i
setbkcolor(BKCOLOR)
cleardevice()
if((fp=fopen("record","r"))==NULL)
{
printf("\nerror on open file!")
getch()
exit(1)
}
gotoxy(1,1)
printf("\n\t\t\tRecord Information\n")
printf("Record-holder Achievement(s)\t Time(h:m:s)\t\tDate(y/m/d)")
for(i=0i<MAXi++)
{fseek(fp,i*sizeof(Record),0)
fread(&r[i],sizeof(Record),1,fp)
printf("\n%-10s\t%d\t\t %02d:%02d:%02d\t\t%02d/%02d/%02d",r[i].name,r[i].second,r[i].t.ti_hour,r[i].t.ti_min,r[i].t.ti_sec,r[i].d.da_year,r[i].d.da_mon,r[i].d.da_day)}
fclose(fp)
gotoxy(10,25)
printf("Press any key to return mainmenu...")
}
void DeleteRecords()
{
int i
FILE *fp
fp=fopen("record","w")
for(i=0i<MAXi++)
{
strcpy(r[i].name,"nameless")
r[i].second=0
gettime(&r[i].t)
getdate(&r[i].d)
}
for(i=0i<MAXi++)
fwrite(&r[i],sizeof(Record),1,fp)
fclose(fp)
}
void JudgeRecord()
{
int i=MissionNum-1
time(&t2)
if(r[i].second==0||difftime(t2,t1)<r[i].second)
{
gotoxy(10,3)printf("\t\tYou have broken the record")
r[i].second=difftime(t2,t1)
strcpy(r[i].name,name)
gettime(&r[i].t)
getdate(&r[i].d)
WriteRecord()
}
else
{gotoxy(10,3)printf("\t\tYou have pass this mission")}
gotoxy(10,4)
printf("\t\tpress any key continue...")
getch()
getch()
}
void WriteRecord()
{
FILE *fp
int i=MissionNum-1
fp=fopen("record","rt+")
fseek(fp,i*sizeof(Record),0)
fwrite(&r[MissionNum-1],sizeof(Record),1,fp)
fclose(fp)
}
void RegisterStep()
{
int i
StepNum++
i=(StepNum-1)%STEPMAX
Step[i]=DirectionKey
}
void ReverselyMove()
{
int i
Add ad
i=(StepNum-1)%STEPMAX
if(Step[i]==0) return
else
{
switch(Step[i])
{
case Key_Up:{ad.x=1ad.y=0MoveBack(ad)break}
case Key_Down:{ad.x=-1ad.y=0MoveBack(ad)break}
case Key_Left:{ad.x=0ad.y=1MoveBack(ad)break}
case Key_Right:{ad.x=0ad.y=-1MoveBack(ad)break}
}
StepNum--Step[i]=0BoxMove[i]=0
}
}
void MoveBack(Add a) /*一定可以移动*/
{
int i=(StepNum-1)%STEPMAX
if(BoxMove[i]==0)
{
map[p.x][p.y]-=1InitPic(map[p.x][p.y],p.x,p.y)
p.x=p.x+a.xp.y=p.y+a.y
map[p.x][p.y]+=1InitPic(map[p.x][p.y],p.x,p.y)
}
else if(BoxMove[i]==1)
{
map[p.x-a.x][p.y-a.y]-=2InitPic(map[p.x-a.x][p.y-a.y],p.x-a.x,p.y-a.y)
map[p.x][p.y]+=1InitPic(map[p.x][p.y],p.x,p.y)
p.x=p.x+a.xp.y=p.y+a.y
map[p.x][p.y]+=1InitPic(map[p.x][p.y],p.x,p.y)
}
}
说到小程序游戏,让我第一个想到的就是微信面的小程序里的游戏,当我无聊的时候,就会拿起手中的手机,点开微信,在点开小程序,里面有超多好玩的小游戏。有了小程序游戏,就不怕无聊了。在这里,和大家来分享哪些小程序游戏值得玩一玩。
第一款小游戏:欢乐球球。这个游戏,我已经玩到了8530,看到这个结果之后,我自己都惊呆了,在微信排名的最顶端。这款游戏,真的超级超级解压,每词玩这个小程序游戏的时候,脑袋瓜里面想的就是要比上次玩的更好。不过,玩久了眼睛真的很累,拿手机久了,手真的很酸,最后看到游戏有了突破,又非常的开心。这个游戏成绩可以一直保持,不会过期。
第二款游戏:跳一跳。这款游戏,刚开始玩的时候,老是掉了在坑里面,每次玩的时候, 都是集中注意的在玩,我在想,我当初考试的时候,都还没这么专注呢。这个游戏很好玩,但是不好的就是,成绩只保留一个星期内,过了星期天,又重头开始了。
第三款游戏:异世恋歌。是一款画风少女漫画液弊情的小游戏,进去是一个魔法世界,有不同的人物展示,然后会跟你一一对话,并且设置情节的发展。这款小程序游戏,推荐年龄较小的小姑娘玩特别的合适。
第四款游戏:热狗快跑。这款游戏也是玩到不想听袭来的那种,但是要记得要控制好方向,不然就伏正会掉下去的哦。
第五款游戏:再见吧渣男。这款游戏简直太好玩、太过瘾了。通过各个场景找出男友出轨的证据,然后进缺埋悔行惩罚他,惩罚的时候真的太过瘾了。有些感情失败的妹子,可以玩玩这个游戏,或许可以帮助你走出不开心的日子。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)