溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C語(yǔ)言怎么實(shí)現(xiàn)反彈球小游戲

發(fā)布時(shí)間:2021-04-17 15:11:48 來(lái)源:億速云 閱讀:442 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹了C語(yǔ)言怎么實(shí)現(xiàn)反彈球小游戲,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

具體內(nèi)容如下

這是利用函數(shù)寫(xiě)的C語(yǔ)言小游戲,用來(lái)檢驗(yàn)自己的學(xué)習(xí)成果

反彈球的實(shí)現(xiàn)主要有幾個(gè)子函數(shù)組成

問(wè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; //擋板中心坐標(biāo)
int radius;  //擋板半徑 
int left,right; //鍵盤(pán)左右邊界 
int ball_number; //反彈小球次數(shù)
int block_x,block_y; //方塊的位置 
int score; //消掉方塊的個(gè)數(shù) 
 
void HideCursor() //隱藏光標(biāo) 
{
 CONSOLE_CURSOR_INFO cursor_info = {1, 0};
 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
 
void gotoxy(int x,int y) //光標(biāo)移動(dòng)到(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; //小球坐標(biāo) 
 ball_y=width/2;
 
 ball_vx=1; //小球速度方向 
 ball_vy=1;
 
 position_x=high-1; //擋板中心坐標(biāo)
 position_y=width/2; 
 
 radius=5; //擋板半徑
 
 left=position_y-radius; //鍵盤(pán)邊界 
 right=position_y+radius;
 
 block_x=0;  //方塊位置
 block_y=width/2-4; 
 
 ball_number=0; //反彈小球個(gè)數(shù)
 
 score=0; //消掉小球個(gè)數(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("消掉小球個(gè)數(shù):%d\n",score);
 } 
 
void updateWithoutInpute() //與用戶輸入無(wú)關(guān)的更新
{
 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; //小球向速度方向移動(dòng) 
 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() //與用戶輸入有關(guān)的更新
{
 char input;
 if(kbhit())
 {
 input=getch();
 if((input=='a')&&(left>=0))
 {
 position_y--;
 left=position_y-radius; //鍵盤(pán)邊界 
 right=position_y+radius;
 }
 if((input=='d')&&(right<width))
 {
 position_y++;
 left=position_y-radius; //鍵盤(pán)邊界 
 right=position_y+radius;
 } 
 }
 }
 
int main()
{
 system("color 2f");   //改變控制臺(tái)顏色
 startup();
 while(1)
 { 
 show();     //顯示界面
 updateWithoutInpute();  //與用戶輸入無(wú)關(guān)的更新
 updateWithInpute();   //與用戶輸入有關(guān)的更新
 }
 }

小編之前也收藏了一段代碼:C語(yǔ)言實(shí)現(xiàn)小球反彈,分享給大家

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
void ball()//1.畫(huà)出小球
{
 printf("\t\t\t◎");
}
int main()
{
 int h=20;//球的高度初始化為20
 int i,j;//i是用來(lái)確定球的起點(diǎn)與終點(diǎn),j是確定球的位置
 int der=1;//判斷等于1時(shí)球下落,為0時(shí)球上升
 while(h>0)//高度大于0時(shí),球都在動(dòng)(當(dāng)高度為0時(shí)停止)
 {
 if(der==1)
 {
 for(i=20-h;i<20;i++)//確定起點(diǎn)和終點(diǎn) 下落過(guò)程
 {
 system("cls");
 for(j=0;j<=i;j++)//確定球的位置
 {
  printf("\n");
 }
 ball();
 Sleep(50);
 }
 der=0;
 }
 else
 {
 h=h*8/9;//強(qiáng)起來(lái)高度是原來(lái)的9分之8
 for(i=20;i>=20-h;i--)//確定起點(diǎn)和終點(diǎn) 上升過(guò)程
 {
 system("cls");
 for(j=0;j<=i;j++)//確定球的位置
 {
  printf("\n");
 }
 ball();
 Sleep(50);
 }
 der=1;
 }
 
 }
 return 0;
}

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“C語(yǔ)言怎么實(shí)現(xiàn)反彈球小游戲”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI