C語(yǔ)言實(shí)現(xiàn)反彈球消磚塊游戲
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)反彈球消磚塊游戲的具體代碼,供大家參考,具體內(nèi)容如下
1.目標(biāo)要求:
1.擊中上方方塊’H’,分?jǐn)?shù)加1
2.下方控制線沒(méi)有接到小球時(shí),游戲結(jié)束
2.C語(yǔ)言代碼:
#include<stdio.h> #include<stdlib.h> #include<windows.h> #include<conio.h> /* ? ? ?? ?《反彈球消磚塊》?? ?by:你最珍貴 ? ? ?? ? ?? ??? ??? ? ——————————— ?? ??? ??? ?|控制信號(hào): | 左 | 右 | ?? ??? ??? ? ———————————? ?? ??? ??? ?| ? ?鍵盤(pán): | ?j | ?l |? ?? ??? ??? ? ——————————— ?? ?? ?? ? 1.擊中上方方塊'H',分?jǐn)?shù)加1 ? ?? ? 2.下方控制線沒(méi)有接到小球時(shí),游戲結(jié)束? */ void HideCursor(){?? ?//隱藏光標(biāo)位置 ,這個(gè)函數(shù)復(fù)制代碼就行? ?? ?CONSOLE_CURSOR_INFO cursor_info={1,0};? ?? ?SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); } void gotoxy(int x,int y){?? ?//把光標(biāo)放在(0,0)位置 ,這個(gè)函數(shù)復(fù)制代碼就行 ?? ?HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); ?? ?COORD pos; ?? ?pos.X = x; ?? ?pos.Y = y; ?? ?SetConsoleCursorPosition(handle,pos); }? int IsEnd;//是否結(jié)束? int interface_x,interface_y;//界面行數(shù)、列數(shù)? int block_y;//磚塊列位置? int ctrlline_width,ctrlline_left,ctrlline_right;//控制線的左列數(shù),寬度,右列數(shù)? int ball_x,ball_y;//小球位置? int ballv_x,ballv_y; //小球行列速度(1為正方向-1為反方向) int scores;//分?jǐn)?shù)? int ballv_num;//小球速度的慢速變量,數(shù)值越大越慢? int ballv_num_i;//小球慢速變量值的循環(huán)變量? void startup(){?? ?//【數(shù)據(jù)初始化】? ?? ?HideCursor();//不顯示光標(biāo)? ?? ?IsEnd = 0; ?? ?interface_x = 22; ?? ?interface_y = 30; ?? ?block_y = rand()%(interface_y-6)+2;? ?? ?ctrlline_width=8; ?? ?ctrlline_left=(interface_y-ctrlline_width-2)/2+1+1;//控制線最左列位置? ?? ?ctrlline_right=ctrlline_left+ctrlline_width-1;? ?? ?ball_x=interface_x-1; ?? ?ball_y=ctrlline_left+ctrlline_width/2;? ?? ?ballv_x=1; ?? ?ballv_y=1; ?? ?scores=0; ?? ?ballv_num=3;? ?? ?ballv_num_i=1;? } void show_begin(){//【初始頁(yè)面展示】? ?? ?int i,j; ?? ?int start=0; ?? ?char input; ??? ?while(!start){ ??? ??? ?gotoxy(0,0);//每次輸出頁(yè)面把鼠標(biāo)放回(0,0)? ??? ??? ?for(i=1;i<=interface_x/2-4;i++) printf("\n");? ?? ??? ?for(i=1;i<interface_y/2-8;i++) printf(" "); ?? ??? ?printf("《反彈球消磚塊》\n\n"); ?? ??? ?for(i=1;i<interface_y/2-9;i++) printf(" "); ?? ??? ?printf("請(qǐng)按任意鍵開(kāi)始游戲\n\n"); ?? ??? ?for(i=1;i<=interface_x/2-6;i++) printf("\n"); ?? ??? ?if(kbhit()){ ?? ??? ??? ?input = getch(); ?? ??? ??? ?if(input) start=1; ?? ??? ?} ?? ?} }? void show(){?? ?//【顯示畫(huà)面】? ?? ?gotoxy(0,0);//每次輸出頁(yè)面把鼠標(biāo)放回(0,0)? ?? ?int i,j; ?? ?for(i=1;i<=interface_y/2-8;i++) printf(" "); ?? ?printf("《反彈球消磚塊》") ; ?? ?for(i=1;i<=interface_y/2-8-8;i++) printf(" "); ?? ?printf("分?jǐn)?shù):%3d\n",scores); ?? ?for(i=1;i<=interface_x;i++){ ?? ??? ?printf(" ");//使屏幕對(duì)稱(chēng)加的空格? ?? ??? ?for(j=1;j<=interface_y;j++){?? ??? ??? ? ?? ??? ??? ?if(j==1||j==interface_y){?? ?//邊框? ?? ??? ??? ??? ?printf("|"); ?? ??? ??? ?}else if(i==interface_x){?? ?//邊框? ?? ??? ??? ??? ?printf("_"); ?? ??? ??? ?}else if(i==1){?? ??? ?//上邊界? ?? ??? ??? ??? ?printf("V"); ?? ??? ??? ?}else if(i==interface_x-1&&(j>=ctrlline_left&&j<=ctrlline_right)){?? ?//控制線? ?? ??? ??? ??? ?printf("*"); ?? ??? ??? ?}else if(i==2&&(j>=block_y&&j<=block_y+4)){?? ??? ?//磚塊? ?? ??? ??? ??? ?printf("H"); ?? ??? ??? ?}else if(i==ball_x&&j==ball_y){?? ??? ?//反彈球? ?? ??? ??? ??? ?printf("O"); ?? ??? ??? ?}else printf(" ");?? ?//什么也不是的位置輸出空格? ?? ??? ?} ?? ??? ?printf("\n"); ?? ?} ?? ? } void update_outinput(){?? ?//【與輸入無(wú)關(guān)的更新】? ?? ?ballv_num_i= (ballv_num_i==ballv_num)?1:ballv_num_i+1;//ballv_num_i一次從{1到ballv_num}循環(huán),當(dāng)ballv_num_i為最大時(shí)才更新球的位置,此目的是減速? ?? ?if(ballv_num_i==ballv_num){ ?? ??? ?if(ball_y==2||ball_y==interface_y-1){//判斷是否到左右邊界? ?? ??? ??? ?ballv_y *= -1; ?? ??? ?} ?? ??? ?if(ball_x==2){//判斷是否到上邊界 ?? ??? ??? ?if(ball_y>=block_y&&ball_y<=block_y+4){//判斷在上邊界有無(wú)消去磚塊? ?? ??? ??? ??? ?block_y = rand()%(interface_y-6)+2;//消去則磚塊位置重置? ?? ??? ??? ??? ?scores++;//分?jǐn)?shù)加1 ?? ??? ??? ??? ?printf("\a");//提示音? ?? ??? ??? ?} ?? ??? ??? ?ballv_x *= -1;//不論是否碰磚塊,都要反彈? ?? ??? ?} ?? ??? ?if(ball_x==interface_x-1){//判斷是否下邊界接住小球了,若接住反彈,否則結(jié)束游戲? ?? ??? ??? ?if(ball_y>=ctrlline_left && ball_y<=ctrlline_right){ ?? ??? ??? ??? ?ballv_x *= -1; ?? ??? ??? ?}else{ ?? ??? ??? ??? ?IsEnd = 1; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?ball_x += ballv_x; ?? ??? ?ball_y += ballv_y; ?? ?}?? ? } void update_input(){//【與輸入有關(guān)的更新】? ?? ?char input; ?? ?if(kbhit()){ ?? ??? ?input = getch(); ?? ??? ?if( input == 'j'){//輸入“j”下方控制線左移? ?? ??? ??? ?ctrlline_left= (ctrlline_left==2)?2:ctrlline_left-1; ?? ??? ??? ?ctrlline_right= ctrlline_left+ctrlline_width-1; ?? ??? ?}else if( input == 'l'){//輸入“l(fā)”下方控制線右移? ?? ??? ??? ?ctrlline_left= (ctrlline_left==interface_y-ctrlline_width)?\ interface_y-ctrlline_width:ctrlline_left+1; ?? ??? ??? ?ctrlline_right= ctrlline_left+ctrlline_width-1; ?? ??? ?} ?? ?} } void show_end(){//【顯示失敗界面】? ?? ?system("cls");? ?? ?printf("\n\n\n\n\n\ngame over!\n\n\n\n\n\n\n\n\n\n\n\n\n");?? ? ?? ?system("pause");//暫停? ?? ?system("pause");//暫停 } int main(){ ?? ?startup();?? ?//數(shù)據(jù)初始化 ?? ?show_begin();//初始頁(yè)面? ?? ?while(!IsEnd){?? ?//游戲循環(huán)執(zhí)行? ?? ??? ?show();?? ?// 顯示畫(huà)面? ?? ??? ?update_outinput();?? ?//與輸入無(wú)關(guān)的更新? ?? ??? ?update_input();?? ?//與輸入有關(guān)的更新? ?? ?} ?? ?show_end(); //顯示失敗界面? ?? ?return 0; }
3.運(yùn)行結(jié)果:
小游戲玩法:
《反彈球消磚塊》by:你最珍貴
————————————————————
|控制信號(hào): | 左 | 右 |
————————————————————
| 鍵盤(pán): | j | l |
————————————————————
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
用C語(yǔ)言實(shí)現(xiàn)單鏈表的各種操作(一)
本篇文章是對(duì)用C語(yǔ)言實(shí)現(xiàn)單鏈表的各種操作進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C/C++編程判斷String字符串是否包含某個(gè)字符串實(shí)現(xiàn)示例
這篇文章主要為大家介紹了C++編程中判斷String字符串是否包含某個(gè)字符串的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11C++實(shí)現(xiàn)LeetCode(144.二叉樹(shù)的先序遍歷)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(144.二叉樹(shù)的先序遍歷),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C++簡(jiǎn)明圖解分析靜態(tài)成員與單例設(shè)計(jì)模式
與靜態(tài)數(shù)據(jù)成員不同,靜態(tài)成員函數(shù)的作用不是為了對(duì)象之間的溝通,而是為了能處理靜態(tài)數(shù)據(jù)成員,靜態(tài)成員函數(shù)沒(méi)有this指針。既然它沒(méi)有指向某一對(duì)象,也就無(wú)法對(duì)一個(gè)對(duì)象中的非靜態(tài)成員進(jìn)行默認(rèn)訪問(wèn)2022-06-06C++友元(Friend)用法實(shí)例簡(jiǎn)介
這篇文章主要介紹了C++友元(Friend)用法,對(duì)于C++的學(xué)習(xí)來(lái)說(shuō)有很好的參考價(jià)值,需要的朋友可以參考下2014-08-08詳解C語(yǔ)言快速排序三種方法的單趟實(shí)現(xiàn)
本文將通過(guò)圖片重點(diǎn)為大家介紹一下C語(yǔ)言中快速排序三種方法的單趟實(shí)現(xiàn):分別是hoare法、挖坑法、雙指針?lè)?,文中示例代碼講解詳細(xì),感興趣的可以了解一下2022-06-06