欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言實(shí)現(xiàn)反彈球消磚塊游戲

 更新時(shí)間:2022年03月31日 15:29:19   作者:summery456  
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)反彈球消磚塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(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))

    合并排序(C語(yǔ)言實(shí)現(xiàn))

    遞歸算法是把一個(gè)問(wèn)題分解成和自身相似的子問(wèn)題,然后再調(diào)用自身把相應(yīng)的子問(wèn)題解決掉。這些算法用到了分治思想。
    2013-02-02
  • 用C語(yǔ)言實(shí)現(xiàn)單鏈表的各種操作(一)

    用C語(yǔ)言實(shí)現(xiàn)單鏈表的各種操作(一)

    本篇文章是對(duì)用C語(yǔ)言實(shí)現(xiàn)單鏈表的各種操作進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • c++實(shí)現(xiàn)簡(jiǎn)單的線程池

    c++實(shí)現(xiàn)簡(jiǎn)單的線程池

    這里給大家介紹了C++中對(duì)于pthread線程的一個(gè)簡(jiǎn)單應(yīng)用以及使用繼承CDoit,實(shí)現(xiàn)其中的start和end,有需要的小伙伴可以參考下
    2015-11-11
  • C/C++編程判斷String字符串是否包含某個(gè)字符串實(shí)現(xiàn)示例

    C/C++編程判斷String字符串是否包含某個(gè)字符串實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了C++編程中判斷String字符串是否包含某個(gè)字符串的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • C++實(shí)現(xiàn)LeetCode(144.二叉樹(shù)的先序遍歷)

    C++實(shí)現(xiàn)LeetCode(144.二叉樹(shù)的先序遍歷)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(144.二叉樹(shù)的先序遍歷),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C/C++指針介紹與使用詳解

    C/C++指針介紹與使用詳解

    不知從何時(shí)起對(duì)你一眼萬(wàn)年,從此,每一天被賦予了特別的意義。時(shí)隔多年,依然揮之不去是你------指針?。。”酒袔缀鯏?shù)據(jù)類(lèi)型只用了int,但是float、double等也是可以的
    2022-08-08
  • 深入解析C語(yǔ)言中typedef的四個(gè)用途

    深入解析C語(yǔ)言中typedef的四個(gè)用途

    以下是對(duì)C語(yǔ)言中typedef的四個(gè)用途進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-08-08
  • C++簡(jiǎn)明圖解分析靜態(tài)成員與單例設(shè)計(jì)模式

    C++簡(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-06
  • C++友元(Friend)用法實(shí)例簡(jiǎn)介

    C++友元(Friend)用法實(shí)例簡(jiǎn)介

    這篇文章主要介紹了C++友元(Friend)用法,對(duì)于C++的學(xué)習(xí)來(lái)說(shuō)有很好的參考價(jià)值,需要的朋友可以參考下
    2014-08-08
  • 詳解C語(yǔ)言快速排序三種方法的單趟實(shí)現(xiàn)

    詳解C語(yǔ)言快速排序三種方法的單趟實(shí)現(xiàn)

    本文將通過(guò)圖片重點(diǎn)為大家介紹一下C語(yǔ)言中快速排序三種方法的單趟實(shí)現(xiàn):分別是hoare法、挖坑法、雙指針?lè)?,文中示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-06-06

最新評(píng)論