C語言實現(xiàn)反彈球小游戲
更新時間:2020年02月24日 19:00:08 作者:Cielfire
這篇文章主要為大家詳細介紹了C語言實現(xiàn)反彈球小游戲,利用函數(shù)寫的C語言小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文為大家分享了C語言反彈球游戲的具體代碼,供大家參考,具體內(nèi)容如下
這是利用函數(shù)寫的C語言小游戲,用來檢驗自己的學習成果
反彈球的實現(xiàn)主要有幾個子函數(shù)組成
問題也在于如何實現(xiàn)小球的下落,以及碰撞得分等情況
#include<stdio.h>
#include<windows.h>
#include<conio.h>
//定義全局變量
int high,width; //游戲邊界
int ball_x,ball_y; //小球位置
int ball_vx,ball_vy; //小球速度
int position_x,position_y; //擋板中心坐標
int radius; //擋板半徑
int left,right; //鍵盤左右邊界
int ball_number; //反彈小球次數(shù)
int block_x,block_y; //方塊的位置
int score; //消掉方塊的個數(shù)
void HideCursor() //隱藏光標
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void gotoxy(int x,int y) //光標移動到(x,y)位置,清屏函數(shù)
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle,pos);
}
void startup() //數(shù)據(jù)初始化
{
high=18; //定義邊界
width=26;
ball_x=0; //小球坐標
ball_y=width/2;
ball_vx=1; //小球速度方向
ball_vy=1;
position_x=high-1; //擋板中心坐標
position_y=width/2;
radius=5; //擋板半徑
left=position_y-radius; //鍵盤邊界
right=position_y+radius;
block_x=0; //方塊位置
block_y=width/2-4;
ball_number=0; //反彈小球個數(shù)
score=0; //消掉小球個數(shù)
HideCursor();
}
void show() //顯示界面
{
gotoxy(0,0);
int i,j;
for(i=0;i<=high;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("@");
else if(i==high) //輸出下邊界
printf("-");
else if(j==width) //輸出右邊界
printf("|");
else if((i==high-1)&&(j>left)&&(j<right))
printf("*");
else printf(" ");
}
printf("\n");
}
printf("反彈小球次數(shù):%d\n",ball_number);
printf("消掉小球個數(shù):%d\n",score);
}
void updateWithoutInpute() //與用戶輸入無關的更新
{
if(ball_x==position_x-1) //小球撞到擋板
{
if((ball_y>=left)&&(ball_y<=right))
{
ball_number++;
//printf("\a");
}
else
{
printf("游戲失敗\n");
system("pause");
exit(0);
}
}
ball_x = ball_x + ball_vx; //小球向速度方向移動
ball_y = ball_y + ball_vy;
if((ball_x==0) || (ball_x==high-2)) //小球撞到上下邊界
ball_vx=-ball_vx;
if((ball_y==0) || (ball_y==width-1)) //小球撞到左右邊界
ball_vy=-ball_vy;
if((block_x==ball_x) && (block_y==ball_y)) //小球撞到滑塊
{
block_y=rand()%width-1;
score++;
}
Sleep(120);
}
void updateWithInpute() //與用戶輸入有關的更新
{
char input;
if(kbhit())
{
input=getch();
if((input=='a')&&(left>=0))
{
position_y--;
left=position_y-radius; //鍵盤邊界
right=position_y+radius;
}
if((input=='d')&&(right<width))
{
position_y++;
left=position_y-radius; //鍵盤邊界
right=position_y+radius;
}
}
}
int main()
{
system("color 2f"); //改變控制臺顏色
startup();
while(1)
{
show(); //顯示界面
updateWithoutInpute(); //與用戶輸入無關的更新
updateWithInpute(); //與用戶輸入有關的更新
}
}
小編之前也收藏了一段代碼:C語言實現(xiàn)小球反彈,分享給大家
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
void ball()//1.畫出小球
{
printf("\t\t\t◎");
}
int main()
{
int h=20;//球的高度初始化為20
int i,j;//i是用來確定球的起點與終點,j是確定球的位置
int der=1;//判斷等于1時球下落,為0時球上升
while(h>0)//高度大于0時,球都在動(當高度為0時停止)
{
if(der==1)
{
for(i=20-h;i<20;i++)//確定起點和終點 下落過程
{
system("cls");
for(j=0;j<=i;j++)//確定球的位置
{
printf("\n");
}
ball();
Sleep(50);
}
der=0;
}
else
{
h=h*8/9;//強起來高度是原來的9分之8
for(i=20;i>=20-h;i--)//確定起點和終點 上升過程
{
system("cls");
for(j=0;j<=i;j++)//確定球的位置
{
printf("\n");
}
ball();
Sleep(50);
}
der=1;
}
}
return 0;
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
FFmpeg實現(xiàn)將編碼后數(shù)據(jù)保存成mp4
這篇文章主要為大家詳細介紹了FFmpeg如何實現(xiàn)將編碼后數(shù)據(jù)保存成mp4,即從內(nèi)存塊中獲取原始數(shù)據(jù),然后依次進行解碼、編碼、最后保存成mp4視頻文件,感興趣的可以了解一下2023-08-08
C++類與對象深入之靜態(tài)成員與友元及內(nèi)部類詳解
朋友們好,這篇播客我們繼續(xù)C++的初階學習,現(xiàn)在對我們對C++的靜態(tài)成員,友元,內(nèi)部類知識點做出總結(jié),整理出來一篇博客供我們一起復習和學習,如果文章中有理解不當?shù)牡胤?還希望朋友們在評論區(qū)指出,我們相互學習,共同進步2022-06-06
vs2019永久配置opencv開發(fā)環(huán)境的方法步驟
這篇文章主要介紹了vs2019永久配置opencv開發(fā)環(huán)境的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03

