最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

反彈球消磚塊,是一款很簡(jiǎn)單的打磚塊游戲,控制你的擋板擋住彈球,打掉上面的磚塊,本篇博客中,主要使用printf與scanf函數(shù)實(shí)現(xiàn)消磚塊游戲

整體思路

主函數(shù)

int main()
{
?? ?startup();//初始化
?? ?while (1)
?? ?{
?? ??? ?show();//顯示畫(huà)面 ?
?? ??? ?updateWitoutIput();//與用戶輸入無(wú)關(guān)的更新 ?//更新數(shù)據(jù)
?? ??? ?updateWithInput(); //與用戶輸入有關(guān)的更新 ?//輸入
?? ?}
?? ?return 0;
}

輔助函數(shù)

void gotoxy(int x, int y) //將光標(biāo)調(diào)整到(x,y)的位置 ?代替清屏函數(shù)
{
?? ?HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
?? ?COORD pos;
?? ?pos.X = x;
?? ?pos.Y = y;
?? ?SetConsoleCursorPosition(handle, pos);
}
void HideCursor()?? ?//隱藏光標(biāo)
{
?? ?CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
?? ?SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}

全局變量的定義

#define HIGH 20 ?//游戲界面高度
#define WIDTH 30 ?// 游戲界面寬度
#define V 1 ?//小球的速度
#define RIDUS 5 ?//擋板的半徑

int ball_x, ball_y; ?//小球的坐標(biāo)
int ball_vx, ball_vy; ?//小球的速度
int position_x, position_y; ?//擋板的中心位置
int left, right; ?//擋板的左右位置
int ball_number; ?//反彈小球的次數(shù)
int block_x, block_y; ?//磚塊的坐標(biāo)
int score; ?//消除磚塊的個(gè)數(shù)

數(shù)據(jù)的初始化

//初始化小球
ball_x = HIGH / 2; //高度
ball_y = WIDTH / 2; //寬度
ball_vx = V; ?//小球的縱向速度
ball_vy = V; ?//小球的橫向速度

//初始化擋板
position_x = HIGH / 2;
position_y = WIDTH / 2; ?//擋板的中心位置
left = position_y - RIDUS;//擋板的左位置
right = position_y + RIDUS; ?//擋板的右位置

//初始化磚塊
block_x = 0; //高度
block_y = WIDTH / 2; ?//寬度
score = 0;

顯示畫(huà)面

循環(huán)不斷輸出游戲的界面, 0 表示小球, B 表示磚塊, * 表示擋板

for (i = 0; i < HIGH + 1; i++) //行
{
?? ?for (j = 0; j < WIDTH; j++) //列
?? ?{
?? ??? ?if (i == ball_x && j == ball_y)//輸出小球
?? ??? ?{
?? ??? ??? ?printf("0");
?? ??? ?}
?? ??? ?else if (i == block_x && j == block_y)//輸出磚塊
?? ??? ?{
?? ??? ??? ?printf("B");
?? ??? ?}
?? ??? ?else if (i == HIGH) ?//下邊界 -1,否則循環(huán)走不到high和width
?? ??? ?{
?? ??? ??? ?printf("-");
?? ??? ?}
?? ??? ?else if (j == WIDTH - 1) //右邊界 ?
?? ??? ?{
?? ??? ??? ?printf("|");
?? ??? ?}
?? ??? ?else if (i == HIGH - 1 && j >= left && j <= right) ?//輸出擋板
?? ??? ?{
?? ??? ??? ?printf("*");
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?printf(" ");
?? ??? ?}
?? ?}
}
printf("反彈次數(shù):%d\n", ball_number);
printf("消除磚塊的個(gè)數(shù):%d\n", score);

與用戶無(wú)關(guān)的更新

判斷游戲勝負(fù)

if (ball_x == HIGH - 2) //到達(dá)擋板上方
{
?? ?if (ball_y >= left && ball_y <= right) //被擋板擋住
?? ?{
?? ??? ?ball_number++;
?? ?}
?? ?else ?//沒(méi)被擋板擋住
?? ?{
?? ??? ?printf("游戲失??!\n");
?? ??? ?exit(0); ?//直接結(jié)束
?? ?}
}

消除磚塊得分

if (ball_x == block_x && ball_y == block_y)
{
?? ?score++;
?? ?block_y = rand() % WIDTH;
}

改變小球的位置

ball_x = ball_x + ball_vx;
ball_y = ball_y + ball_vy;
//為了使小球在反彈和結(jié)束時(shí)能夠真缺判斷,所以小球下反彈邊界應(yīng)該在擋板的前一行,小球右反彈邊界應(yīng)該在右邊界的前一列
if (ball_x >= HIGH - 2 || ball_x <= 0) ?//遇到任意一個(gè)邊界即發(fā)生變化 ?
?? ?ball_vx = -ball_vx;
if (ball_y >= WIDTH -2 || ball_y <= 0) ?//-1保證下球再使小球遇到邊界時(shí)反彈但不會(huì)消失
?? ?ball_vy = -ball_vy;

與用戶輸入有關(guān)的更新

input = _getch();
if (input == 'a')
?? ?position_y--;
if (input == 'd')
?? ?position_y++;
left = position_y - RIDUS;//擋板的左位置
right = position_y + RIDUS; ?//擋板的右位置

完整代碼

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

//全局變量的定義
#define HIGH 20 ?//游戲界面高度
#define WIDTH 30 ?// 游戲界面寬度
#define V 1 ?//小球的速度
#define RIDUS 5 ?//擋板的半徑

int ball_x, ball_y; ?//小球的坐標(biāo)
int ball_vx, ball_vy; ?//小球的速度
int position_x, position_y; ?//擋板的中心位置
int left, right; ?//擋板的左右位置
int ball_number; ?//反彈小球的次數(shù)
int block_x, block_y; ?//磚塊的坐標(biāo)
int score; ?//消除磚塊的個(gè)數(shù)

void gotoxy(int x, int y) //將光標(biāo)調(diào)整到(x,y)的位置 ?代替清屏函數(shù)
{
?? ?HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
?? ?COORD pos;
?? ?pos.X = x;
?? ?pos.Y = y;
?? ?SetConsoleCursorPosition(handle, pos);
}
void HideCursor()//隱藏光標(biāo)函數(shù)
{
?? ?CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
?? ?SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void startup()//數(shù)據(jù)的初始化
{
?? ?//初始化小球
?? ?ball_x = HIGH / 2; //高度
?? ?ball_y = WIDTH / 2; //寬度
?? ?ball_vx = V; ?//小球的縱向速度
?? ?ball_vy = V; ?//小球的橫向速度

?? ?//初始化擋板
?? ?position_x = HIGH / 2;
?? ?position_y = WIDTH / 2; ?//擋板的中心位置
?? ?left = position_y - RIDUS;//擋板的左位置
?? ?right = position_y + RIDUS; ?//擋板的右位置

?? ?//初始化磚塊
?? ?block_x = 0; //高度
?? ?block_y = WIDTH / 2; ?//寬度
?? ?score = 0;

}

void show()//顯示畫(huà)面
{
?? ?//system("cls");?
?? ?gotoxy(0, 0);

?? ?int i, j;
?? ?for (i = 0; i < HIGH + 1; i++)
?? ?{
?? ??? ?for (j = 0; j < WIDTH; j++)
?? ??? ?{
?? ??? ??? ?if (i == ball_x && j == ball_y)
?? ??? ??? ?{
?? ??? ??? ??? ?printf("0");
?? ??? ??? ?}
?? ??? ??? ?else if (i == block_x && j == block_y)
?? ??? ??? ?{
?? ??? ??? ??? ?printf("B");
?? ??? ??? ?}
?? ??? ??? ?else if (i == HIGH)
?? ??? ??? ?{
?? ??? ??? ??? ?printf("-");
?? ??? ??? ?}
?? ??? ??? ?else if (j == WIDTH - 1)
?? ??? ??? ?{
?? ??? ??? ??? ?printf("|");
?? ??? ??? ?}
?? ??? ??? ?else if (i == HIGH - 1 && j >= left && j <= right)
?? ??? ??? ?{
?? ??? ??? ??? ?printf("*");
?? ??? ??? ?}
?? ??? ??? ?else
?? ??? ??? ?{
?? ??? ??? ??? ?printf(" ");
?? ??? ??? ?}
?? ??? ?}
?? ??? ?printf("\n");
?? ?}
?? ?printf("反彈次數(shù):%d\n", ball_number);
?? ?printf("消除磚塊的個(gè)數(shù):%d\n", score);
}

void updateWitoutIput()
{
?? ?if (ball_x == HIGH - 2)
?? ?{
?? ??? ?if (ball_y >= left && ball_y <= right)
?? ??? ?{
?? ??? ??? ?ball_number++;
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?printf("游戲失?。n");
?? ??? ??? ?exit(0);
?? ??? ?}
?? ?}
?? ?if (ball_x == block_x && ball_y == block_y)
?? ?{
?? ??? ?score++;
?? ??? ?block_y = rand() % WIDTH;
?? ?}

?? ?ball_x = ball_x + ball_vx;
?? ?ball_y = ball_y + ball_vy;
?? ?if (ball_x >= HIGH - 2 || ball_x <= 0)
?? ??? ?ball_vx = -ball_vx;
?? ?if (ball_y >= WIDTH -2 || ball_y <= 0)
?? ??? ?ball_vy = -ball_vy;

?? ?Sleep(150);?? ?//睡眠時(shí)間
}


void updateWithInput()//與用戶輸入有關(guān)的更新
{
?? ?char input;
?? ?if (_kbhit())
?? ?{
?? ??? ?input = _getch();
?? ??? ?if (input == 'a')
?? ??? ??? ?position_y--;
?? ??? ?if (input == 'd')
?? ??? ??? ?position_y++;
?? ??? ?left = position_y - RIDUS;
?? ??? ?right = position_y + RIDUS;
?? ?}
}
int main()
{
?? ?srand((unsigned)time(NULL));
?? ?startup();//初始化
?? ?HideCursor();
?? ?while (1)
?? ?{
?? ??? ?show();//顯示畫(huà)面 ?
?? ??? ?updateWitoutIput();//與用戶輸入無(wú)關(guān)的更新
?? ??? ?updateWithInput(); //與用戶輸入有關(guān)的更新
?? ?}
?? ?return 0;
}

效果演示

總結(jié)

雖然完成了一個(gè)簡(jiǎn)單的消磚塊游戲,但是很多的功能都未能實(shí)現(xiàn),如磚塊的個(gè)數(shù)、游戲暫停和結(jié)束后的開(kāi)始等等,任需要繼續(xù)的努力。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++基于人工智能搜索策略解決農(nóng)夫過(guò)河問(wèn)題示例

    C++基于人工智能搜索策略解決農(nóng)夫過(guò)河問(wèn)題示例

    這篇文章主要介紹了C++基于人工智能搜索策略解決農(nóng)夫過(guò)河問(wèn)題,簡(jiǎn)單描述了農(nóng)夫過(guò)河問(wèn)題的概念、實(shí)現(xiàn)原理并結(jié)合具體實(shí)例形式給出了C++使用人工智能搜索策略解決農(nóng)夫過(guò)河問(wèn)題的相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • c/c++內(nèi)存分配大小實(shí)例講解

    c/c++內(nèi)存分配大小實(shí)例講解

    在本篇文章里小編給大家整理了一篇關(guān)于c/c++內(nèi)存分配大小實(shí)例講解內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)參考下。
    2021-11-11
  • C語(yǔ)言模擬實(shí)現(xiàn)掃雷游戲

    C語(yǔ)言模擬實(shí)現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言模擬實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • Qt的Qss用法小結(jié)

    Qt的Qss用法小結(jié)

    Qt的Qss是一種用于定義用戶界面的樣式表語(yǔ)言,本文主要介紹了Qt的Qss用法小結(jié),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Qt中簡(jiǎn)單的按鈕槽函數(shù)傳遞參數(shù)方法

    Qt中簡(jiǎn)單的按鈕槽函數(shù)傳遞參數(shù)方法

    這篇文章主要介紹了Qt中簡(jiǎn)單的按鈕槽函數(shù)傳遞參數(shù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++中關(guān)于=default和=delete問(wèn)題

    C++中關(guān)于=default和=delete問(wèn)題

    這篇文章主要介紹了C++中關(guān)于=default和=delete問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • C 語(yǔ)言快速排序?qū)嵗a

    C 語(yǔ)言快速排序?qū)嵗a

    本文主要介紹了C語(yǔ)言的快速排序算法,這里給大家舉例說(shuō)明并附代碼實(shí)例,需要的朋友可以參考下
    2016-07-07
  • C語(yǔ)言編寫(xiě)漢諾塔游戲

    C語(yǔ)言編寫(xiě)漢諾塔游戲

    這篇文章主要介紹了C語(yǔ)言編寫(xiě)漢諾塔游戲,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-11-11
  • C++程序中添加.c.h的實(shí)現(xiàn)方法

    C++程序中添加.c.h的實(shí)現(xiàn)方法

    這篇文章主要介紹了C++程序中添加.c.h的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Qt數(shù)據(jù)庫(kù)應(yīng)用之實(shí)現(xiàn)通用數(shù)據(jù)庫(kù)請(qǐng)求

    Qt數(shù)據(jù)庫(kù)應(yīng)用之實(shí)現(xiàn)通用數(shù)據(jù)庫(kù)請(qǐng)求

    這篇文章主要為大家介紹了Qt中是如何實(shí)現(xiàn)通用數(shù)據(jù)庫(kù)請(qǐng)求的,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Qt有一定幫助,感興趣的小伙伴可以了解一下
    2022-03-03

最新評(píng)論

定安县| 达州市| 宿迁市| 白沙| 武胜县| 庄浪县| 娄烦县| 桐城市| 句容市| 德州市| 布尔津县| 宜章县| 顺义区| 台中市| 驻马店市| 太湖县| 河津市| 宜章县| 云霄县| 宣恩县| 凌海市| 贵州省| 衡水市| 米易县| 宁河县| 涡阳县| 黔东| 江达县| 玉溪市| 应用必备| 神木县| 山西省| 肥西县| 仁寿县| 双柏县| 慈溪市| 凉城县| 资阳市| 临安市| 泾源县| 龙里县|