采用二维数组进行编写
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
int high=15,width=20,collide,score;
int ball_x,ball_y,right,left,radius;
int coin_x,ball_vx,ball_vy;
int canvas[15][20],board_x,board_y;
void hidecursor(){//隐藏光标
CONSOLE_CURSOR_INFO cursor_info={1,0};//第二个值为0表示隐藏光标
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}
void gotoxy(int x,int y){//将光标移到(x,y)位置
HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(handle,pos);
}
void startup(){
hidecursor();
ball_x=high/2;ball_y=width/3;ball_vx=ball_vy=1;
radius=4;board_x=high-1;board_y=width/2;
left=board_y-radius;right=board_y+radius;
coin_x=4;
int i,j;
for(i=0;i<coin_x;i++)//初始化砖块数量
for(j=0;j<width;j++)
canvas[i][j]=3;
for(i=left;i<=right;i++)//初始化挡板
canvas[board_x][i]=2;
}
void show(){
int i,j;
//0代表空白,1代表小球,2代表挡板,3代表金币
gotoxy(0,0);
for(i=0;i<high;i++){
for(j=0;j<width;j++){
if(canvas[i][j]==0)
printf(" ");
else if(canvas[i][j]==1)
printf("O");
else if(canvas[i][j]==2)
printf("*");
else if(canvas[i][j]==3)
printf("$");
}
printf("|\n"); //画右边框,右边框的实际位置是width
}
for(i=0;i<width;i++)//画下边框,下边框的实际位置是high
printf("-");
printf("\n");
printf("得分:%d\n",score);
printf("小球碰撞次数:%d\n",collide);
}
void withoutinput(){
//判断小球是否撞上挡板
if(ball_x==high-2){//下边框是high,挡板是high-1,所以小球该被挡板弹回的位置是high-2
if(ball_y>=left&&ball_y<=right)
collide++;
else{
printf("Game Over!\n");
system("pause");
exit(0);
}
}
//判断小球是否撞上金币
if(canvas[ball_x-1][ball_y]==3){
score++;
canvas[ball_x-1][ball_y]=0;
ball_vx=-ball_vx;
printf("\a");
}
canvas[ball_x][ball_y]=0;//每一次改变小球位置前都要先将上一次小球的位置的值变为0
ball_x+=ball_vx;ball_y+=ball_vy;
canvas[ball_x][ball_y]=1;//每次改变小球位置后立即将该位置值变为1
//判断小球何时转向
if(ball_x==0||ball_x==high-2) //下边框是high,挡板是high-1,所以小球该变向的位置是high-2
ball_vx=-ball_vx;
if(ball_y==0||ball_y==width-1)
ball_vy=-ball_vy;
Sleep(200);
}
void withinput(){
char input;
if(kbhit()){//判断键盘是否有输入,无论是否有输入都会继续循环,头文件是conio.h
input=getch();
if(input=='a'&&left!=0){
canvas[board_x][right]=0;
board_y--;
left=board_y-radius;
right=board_y+radius;
canvas[board_x][left]=2;
}
else if(input=='d'&&right!=width-1){
canvas[board_x][left]=0;
board_y++;
left=board_y-radius;
right=board_y+radius;
canvas[board_x][right]=2;
}
}
}
int main(void){
startup();
while(1){
show();
withoutinput();
withinput();
}
return 0;
}
本文介绍如何使用C语言通过二维数组来编程实现一款反弹小球的游戏,探讨了二维数组在游戏编程中的应用和小球运动的逻辑实现。

2965

被折叠的 条评论
为什么被折叠?



