C語(yǔ)言實(shí)現(xiàn)賓果消消樂
本文實(shí)例為大家分享了C語(yǔ)言賓果消消樂的具體代碼,供大家參考,具體內(nèi)容如下
```c #include<graphics.h> #include<stdio.h> #include<windows.h> #include <conio.h> #include<time.h> #include<mmsystem.h> #define MAPSIZE 10 int map[MAPSIZE][MAPSIZE]; int map2[MAPSIZE][MAPSIZE]; bool state[MAPSIZE][MAPSIZE]; bool state1[MAPSIZE][MAPSIZE]; typedef struct game { int game_state; int counts; int score; int targets; int level; int state; int level_state; int tool_number; int tool_state; int start_state; PIMAGE img[21]; } Game; Game game; int high=0; void init_img() { int i; for(i=0; i<21; i++) game.img[i]=newimage(); getimage(game.img[0],"game\\underground.jpg"); getimage(game.img[1],"game\\red.jpg"); getimage(game.img[2],"game\\green.jpg"); getimage(game.img[3],"game\\blue.jpg"); getimage(game.img[4],"game\\orange.jpg"); getimage(game.img[5],"game\\purple.jpg"); getimage(game.img[6],"game\\brown.jpg"); getimage(game.img[7],"game\\123.jpg"); getimage(game.img[8],"game\\end.jpg"); getimage(game.img[9],"game\\bomb.jpg"); getimage(game.img[10],"game\\win.png"); getimage(game.img[11],"game\\hon.jpg"); getimage(game.img[12],"game\\lu.jpg"); getimage(game.img[13],"game\\lan.jpg"); getimage(game.img[14],"game\\cheng.jpg"); getimage(game.img[15],"game\\zi.jpg"); getimage(game.img[16],"game\\hui.jpg"); getimage(game.img[17],"game\\receive.png"); getimage(game.img[18],"game\\in.jpg"); getimage(game.img[19],"game\\black.jpg"); getimage(game.img[20],"game\\start.jpg"); } void init_map() { int i,j; srand(time(0)); for (i=0; i<MAPSIZE; i++) for (j=0; j<MAPSIZE; j++) { state[i][j]=false; map[i][j]=rand()%6+1; map2[i][j]=map[i][j];//備份圖形 } } void read(int *high) { FILE *fp; fp=fopen("bag.b","rb"); if(fp==NULL) return; fread(high,sizeof(int),1,fp); fclose(fp); } void save(int *high) { FILE *fp; fp=fopen("bag.b","wb"); if(fp==NULL) return; fwrite(high,sizeof(int),1,fp); fclose(fp); } //顯示關(guān)卡 void show_level() { char str[4],str2[8]; putimage(0,0,game.img[0]); sprintf(str, "%4d ", game.level); sprintf(str2, "%4d ", game.targets); setfont(40,0,"隸書"); setcolor(EGERGB(255,255,255)); setbkmode(TRANSPARENT); outtextxy(160,330,"第 關(guān)"); outtextxy(160,330,str); setfont(30,0,"隸書"); outtextxy(150,400,"目標(biāo)分:"); outtextxy(270,400,str2); Sleep(1000); cleardevice(); } //顯示分?jǐn)?shù) void show_word() { char str[4],str1[8],str2[8],scores[8],str3[4]; if(game.score>high) { high=game.score; save(&high); } putimage(0,0,game.img[0]); setfont(30,0,"隸書"); setcolor(EGERGB(250, 210, 0)); setbkmode(TRANSPARENT); outtextxy(10,15, "最高記錄: "); outtextxy(10,55, "關(guān)卡: "); outtextxy(150,55, "目標(biāo)分: "); sprintf(str, "%4d ", game.level); sprintf(str1, "%4d ", high); sprintf(str2, "%4d ", game.targets); sprintf(scores, "%4d ", game.score); sprintf(str3, "%d", game.tool_number); setcolor(EGERGB(255, 255, 255)); outtextxy(60, 55, str); outtextxy(150, 15, str1); outtextxy(260, 55, str2); outtextxy(205, 102, scores); setfont(25,0,"隸書"); outtextxy(410,1,str3); } void show_map() { if(game.level_state==1) show_level(); show_word(); int i,j; for (i=0; i<MAPSIZE; i++) { for (j=0; j<MAPSIZE; j++) if(!state[i][j]) { if(map[i][j]==1) putimage(j*45,i*45+250,game.img[map[i][j]]); else if(map[i][j]==2) putimage(j*45,i*45+250,game.img[map[i][j]]); else if(map[i][j]==3) putimage(j*45,i*45+250,game.img[map[i][j]]); else if(map[i][j]==4) putimage(j*45,i*45+250,game.img[map[i][j]]); else if(map[i][j]==5) putimage(j*45,i*45+250,game.img[map[i][j]]); else if(map[i][j]==6) putimage(j*45,i*45+250,game.img[map[i][j]]); } } } //音頻 void musicu() { mciSendString("close mymusicu",NULL,0,NULL); mciSendString("open game\\unbelievable.mp3 alias mymusicu",NULL,0,NULL); mciSendString("play mymusicu",NULL,0,NULL); } void musicc() { mciSendString("close mymusicc",NULL,0,NULL); mciSendString("open game\\click.mp3 alias mymusicc",NULL,0,NULL); mciSendString("play mymusicc",NULL,0,NULL); } void musicf() { mciSendString("close mymusicf",NULL,0,NULL); mciSendString("open game\\fail.mp3 alias mymusicf",NULL,0,NULL); mciSendString("play mymusicf",NULL,0,NULL); } void musicd() { mciSendString("close mymusicd",NULL,0,NULL); mciSendString("open game\\delt.mp3 alias mymusicd",NULL,0,NULL); mciSendString("play mymusicd",NULL,0,NULL); } void musicb() { mciSendString("close mymusicb",NULL,0,NULL); mciSendString("open game\\bomb.mp3 alias mymusicb",NULL,0,NULL); mciSendString("play mymusicb",NULL,0,NULL); } void musicp() { mciSendString("close mymusicp",NULL,0,NULL); mciSendString("open game\\popwindows.mp3 alias mymusicp",NULL,0,NULL); mciSendString("play mymusicp",NULL,0,NULL); } void musicsheng() { mciSendString("close mymusicsheng",NULL,0,NULL); mciSendString("open game\\成功.mp3 alias mymusicsheng",NULL,0,NULL); mciSendString("play mymusicsheng",NULL,0,NULL); } //判斷此位置是否符合 int avaliable(int x,int y) { if(x<0||x>=MAPSIZE||y<0||y>=MAPSIZE||state[y][x]) return 0; else return 1; } //搜索周圍相同顏色 void search_map(int x,int y,int target) { if((!avaliable(x,y))||map[y][x]!=target) return; state[y][x]=true; state1[y][x]=true; game.counts++; search_map(x-1,y,target); search_map(x+1,y,target); search_map(x,y-1,target); search_map(x,y+1,target); } //搜索到相同顏色后調(diào)整位置 void adjust_map() { int i,j,r,k; int temp[10][10]; for(j=MAPSIZE-1; j>=0; j--) { int m=0; int flag=1; k=j; for(i=MAPSIZE-1; i>=0; i--) if(state[i][j]==false) flag=0; if(flag==1) { if(k==MAPSIZE-1) continue; while(1) { if(k==MAPSIZE-1) break; for(i=MAPSIZE-1; i>=0; i--) { map[i][k]=map[i][k+1]; state[i][k]=state[i][k+1]; state[i][k+1]=true; } k++; } } for(i=MAPSIZE-1; i>=0; i--) if(!state[i][j]) { temp[m][j]=map[i][j]; m++; } r=MAPSIZE-1; for(i=0; i<m; i++) { map[r][j]=temp[i][j]; state[r][j]=false; r--; } for(; r>=0; r--) { state[r][j]=true; } } } //判斷是否通過本關(guān) int end_map() { int i,j,target; int x; int y; int flag=1; for(i=0; i<MAPSIZE; i++) for(j=0; j<MAPSIZE; j++) if(!state[i][j]) { x=j; y=i; target=map[y][x]; if((avaliable(x+1,y)&&map[y][x+1]==target)||(avaliable(x-1,y)&&map[y][x-1]==target) ||(avaliable(x,y-1)&&map[y-1][x]==target)||(avaliable(x,y+1)&&map[y+1][x]==target)) { flag=0; break; } } return flag; } //彈出炸彈窗口,選擇是否使用道具 int bomb_pop() { mouse_msg ms; while(1) { show_map(); putimage(88, 280, game.img[9]); while(mousemsg()) { ms=getmouse(); if(ms.is_left()&&ms.is_down()) { if(ms.x>105&&ms.x<230&&ms.y>380&&ms.y<425) { musicc(); return 0; } if(ms.x>240&&ms.x<370&&ms.y>380&&ms.y<420) { musicc(); return 1; } } } Sleep(500); } } //點(diǎn)擊要炸裂的某一列 void bomb_map() { int i; int x,y; mouse_msg msg; while(1) { show_map(); while(mousemsg()) { msg=getmouse(); if(msg.is_left()&&msg.is_down()) { musicc(); x=msg.x/45; y=(msg.y-250)/45; if(!avaliable(x,y)) continue; for(i=0; i<MAPSIZE; i++) if(state[i][x]==false) { state[i][x]=true; game.counts++; } return; } } Sleep(500); } } //打印出要消除圖形的碎片 void flash_map(int target) { int i,j; show_map(); for(i=0; i<MAPSIZE; i++) for(j=0; j<MAPSIZE; j++) if(state1[i][j]==true) { musicd(); if(target==1) putimage(j*45,i*45+250,game.img[11]); else if(target==2) putimage(j*45,i*45+250,game.img[12]); else if(target==3) putimage(j*45,i*45+250,game.img[13]); else if(target==4) putimage(j*45,i*45+250,game.img[14]); else if(target==5) putimage(j*45,i*45+250,game.img[15]); else if(target==6) putimage(j*45,i*45+250,game.img[16]); } Sleep(200); } //碎片消除后,恢復(fù)以前狀態(tài) void state1_back() { int i,j; for(i=0; i<MAPSIZE; i++) for(j=0; j<MAPSIZE; j++) state1[i][j]=false; } void play_game() { init_map(); int target; int x,y; int i,j; mouse_msg msg; if(game.state==0)//重新開始游戲時(shí)將現(xiàn)有分?jǐn)?shù)置為0 game.score=0; else game.score=game.score; while(1) { show_map(); game.level_state=0; while(mousemsg()) { msg=getmouse(); if(msg.is_left()&&msg.is_down()) { musicc(); if(msg.x>400&&msg.x<450&&msg.y>=40&&msg.y<100&&game.tool_number>=5)//使用炸彈 { musicp(); if(bomb_pop()) { bomb_map(); musicb(); adjust_map(); game.score=game.score+game.counts*20; game.tool_number=game.tool_number-5; show_map(); game.counts=0; } } else { x=msg.x/45; y=(msg.y-250)/45; if(!avaliable(x,y)) continue; target=map[y][x]; if((avaliable(x+1,y)&&map[y][x+1]==target)||(avaliable(x-1,y)&&map[y][x-1]==target) ||(avaliable(x,y-1)&&map[y-1][x]==target)||(avaliable(x,y+1)&&map[y+1][x]==target)) { search_map(x,y,target); game.score=game.score+game.counts*20; if(game.counts>=6) { game.tool_number=game.tool_number+3; musicu(); } flash_map(target); adjust_map(); } game.counts=0; show_map(); Sleep(100); state1_back(); if(end_map()) { if(game.score>=game.targets) { musicsheng(); game.game_state=2; return; } else if(game.score<game.targets) { musicf(); game.game_state=-1; return ; } } } } } } } //領(lǐng)取魔法魚 void get_tool() { mouse_msg ms; while(1) { putimage(0,0,game.img[7]); putimage_transparent(NULL,game.img[17],88,280,0); while(mousemsg()) { ms=getmouse(); if(ms.is_left()&&ms.is_down()) { if(ms.x>170&&ms.x<300&&ms.y>380&&ms.y<420) { musicc(); game.tool_number=10; game.tool_state=0; return ; } } } Sleep(500); } } //游戲指南界面 void inter_game() { mouse_msg ms; while(1) { putimage(0,0,game.img[18]); while(mousemsg()) { ms=getmouse(); if(ms.is_left()&&ms.is_down()) { musicc(); game.game_state=0; return; } } Sleep(500); } } void start_game() { mouse_msg ms; if(game.start_state==1) { putimage(0,0,game.img[19]); Sleep(500); putimage(0,0,game.img[20]); Sleep(500); game.start_state=0; } while(1) { putimage(0,0,game.img[7]); while(mousemsg()) { ms=getmouse(); if(ms.is_left()&&ms.is_down()) { musicc(); if(ms.x>140&&ms.x<310&&ms.y>370&&ms.y<410) { if(game.tool_state==1) { musicp(); get_tool(); } game.game_state=1; game.level_state=1; return; } if(ms.x>140&&ms.x<310&&ms.y>420&&ms.y<460) { game.game_state=3; return; } if(ms.x>140&&ms.x<310&&ms.y>470&&ms.y<500) { game.game_state=5; return; } } } Sleep(500); } } void fail_again() { int i,j; int target; int x,y; int flag=0; mouse_msg msg; for(i=0; i<MAPSIZE; i++) for(j=0; j<MAPSIZE; j++) { state[i][j]=false; map[i][j]=map2[i][j]; } while(1) { show_map(); while(mousemsg()) { msg=getmouse(); if(msg.is_left()&&msg.is_down()) { musicc(); if(msg.x>400&&msg.x<450&&msg.y>=40&&msg.y<100&&game.tool_number>=5) { musicp(); if(bomb_pop()) { bomb_map(); musicb(); adjust_map(); game.score=game.score+game.counts*20; game.tool_number=game.tool_number-5; show_map(); game.counts=0; } } else { x=msg.x/45; y=(msg.y-250)/45; if(!avaliable(x,y)) continue; target=map[y][x]; if((avaliable(x+1,y)&&map[y][x+1]==target)||(avaliable(x-1,y)&&map[y][x-1]==target) ||(avaliable(x,y-1)&&map[y-1][x]==target)||(avaliable(x,y+1)&&map[y+1][x]==target)) { search_map(x,y,target); game.score=game.score+game.counts*20; if(game.counts>=6) { game.tool_number=game.tool_number+3; musicu(); } flash_map(target); adjust_map(); } game.counts=0; show_map(); Sleep(100); state1_back(); if(end_map()) { if(game.score>=game.targets) { musicsheng(); game.game_state=2; return; } else if(game.score<game.targets) { musicf(); game.game_state=-1; return ; } } } } } } } void end_game() { mouse_msg msg; while(1) { show_map(); putimage(100, 320, game.img[8]); setfont(30,0,"隸書"); setcolor(EGERGB(255,255,255)); setbkmode(TRANSPARENT); outtextrect(120,330, 180,450,"闖關(guān)失敗,是否重闖本關(guān)?"); while (mousemsg()) { msg = getmouse(); if(msg.is_left()&&msg.is_down()) { if(msg.x>115&&msg.x<222&&msg.y>400&&msg.y<430) { musicc(); game.game_state=0; game.state=0; game.level=1; game.targets=1500; game.score=0; return ; } if(msg.x>230&&msg.x<336&&msg.y>400&&msg.y<430) { musicc(); if(game.level>1) game.score=game.score-1500; else if(game.level==1) game.score=0; game.game_state=4; return ; } } } Sleep(500); } } void win_game() { mouse_msg msg; while(1) { show_map(); putimage_transparent(NULL,game.img[10],130,300,0); while (mousemsg()) { msg = getmouse(); if(msg.is_left()&&msg.is_down()) { musicc(); game.level++; game.targets=game.targets+1600; game.state=1; game.game_state=1; game.level_state=1; game.tool_number=game.tool_number+2; return ; } } Sleep(500); } } void play() { while(1) { if(game.game_state==0) start_game(); else if(game.game_state==1) play_game(); else if(game.game_state==-1) end_game(); else if(game.game_state==2) win_game(); else if(game.game_state==4) fail_again(); else if(game.game_state==5) inter_game(); else if(game.game_state==3) return ; } } int main() { initgraph(450,700); game.game_state=0; game.counts=0; game.score=0; game.targets=1500; game.level=1; game.tool_number=0; game.tool_state=1; game.start_state=1; init_img(); mciSendString("open game\\under.mp3 alias mymusicg",NULL,0,NULL); mciSendString("play mymusicg repeat",NULL,0,NULL); read(&high); play(); closegraph(); mciSendString("close mymusicg repeat",NULL,0,NULL); return 0; }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言數(shù)據(jù)的存儲(chǔ)超詳細(xì)講解中篇練習(xí)
使用編程語(yǔ)言進(jìn)行編程時(shí),需要用到各種變量來存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么2022-04-04C++深入講解namespace與string關(guān)鍵字的使用
namespace命名空間或者叫名字空間,傳統(tǒng)的c++只有一個(gè)全局的namespace,namespace引入了復(fù)雜性。namespace允許像類,對(duì)象,函數(shù)聚集在一個(gè)名字下。本質(zhì)上講namespace是對(duì)全局作用域的細(xì)分2022-05-05C++實(shí)現(xiàn)LeetCode(211.添加和查找單詞-數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì))
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(211.添加和查找單詞-數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08利用反射獲得類的public static/const成員的值實(shí)例
下面小編就為大家?guī)硪黄梅瓷浍@得類的public static/const成員的值實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12C++學(xué)習(xí)小結(jié)之?dāng)?shù)據(jù)類型及轉(zhuǎn)換方式
本文給大家分享的是本人在學(xué)習(xí)C++過程中的一個(gè)小心得,關(guān)于數(shù)據(jù)類型和轉(zhuǎn)換方式的,這里記錄下來,推薦給菜鳥們,高手大神請(qǐng)直接飄過。2015-07-07C語(yǔ)言time.h庫(kù)函數(shù)的具體用法
C語(yǔ)言的time.h頭文件提供了一系列的函數(shù)和工具,用于處理時(shí)間和日期相關(guān)的操作,本文主要介紹了C語(yǔ)言time.h庫(kù)函數(shù)的具體用法,感興趣的可以了解一下2023-12-12C++實(shí)現(xiàn)LeetCode(167.兩數(shù)之和之二 - 輸入數(shù)組有序)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(167.兩數(shù)之和之二 - 輸入數(shù)組有序),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08關(guān)于讀取popen輸出結(jié)果時(shí)未截?cái)嘧址畬?dǎo)致的命令行注入詳解
這篇文章主要給大家介紹了關(guān)于讀取popen輸出結(jié)果時(shí)未截?cái)嘧址畬?dǎo)致的命令行注入的相關(guān)資料,文中通過圖文及示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03C語(yǔ)言實(shí)現(xiàn)萬(wàn)年歷源碼
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)萬(wàn)年歷源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10