C语言乒乓球游戏源码

更新时间:2023-03-19 20:03:01 阅读量: 人文社科 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言乒乓球游戏源码

程序说明:

1.程序运行时,显示游戏欢迎页!

2.可统计游戏当前分数,并时刻进行统计和显示!

3.可根据游戏当前分数,调整乒乓球的速度,以提高游戏难度!

4.游戏结束时,显示游戏结束页,提示玩家退出游戏!

游戏源码:

#include "stdio.h"

#include "graphics.h"

#include "stdlib.h"

#include "bios.h"

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define ESC 0x011b

/* 存放方块的信息 */

struct box {

int x; /* 方块右上角横坐标 */

int y; /* 方块右上角纵坐标 */

int key; /* 方块是否被击中过,1表示被击中过,0表示没有被击中过 */

}a[10][20];

int k; /* 用来判断游戏的结束方式,0:按ESC退出,1:正常退出 */

int num=0; /* 用来统计用户的当前分数 */

char strnum[5]; /* 用来存放用户当前分数对应的字符串 */

/* 初始化图形 */

void initgr() {

int gd=DETECT,gm;

initgraph(&gd,&gm,"");

}

/* 画出初始图 */

void picture() {

int x,y,i,color;

setcolor(WHITE);

outtextxy(250,400,"ANY KEY ...");

while(!kbhit()) {

C语言乒乓球游戏源码

settextstyle(0,0,4);

for(i=1;i<=15;i++) {

setcolor(i);

outtextxy(100,180,"PING PANG BALL");

delay(5000);

}

}

cleardevice();

setbkcolor(BLUE);

setfillstyle(SOLID_FILL,RED);

bar(300,400,348,404);

textcolor(WHITE); /* 显示玩家当前分数 */

outtextxy(250,420,"NUMBER:");

/* 画屏幕上端的方块 */

randomize();

for(y=15;y<=180;y=y+15) {

if((y/15)%2==0) {

i=1;

} else {

i=0;

}

for(x=0;x<=640;x=x+32) {

if((x/32)%2==0 && i==1) {

color=5;

} else if(i==1 && (x/32)%2==1) {

color=15;

} else if(i==0 && (x/32)%2==0) {

color=15;

} else {

color=5;

}

/* color=((rand()%5)+2); */

setfillstyle(SOLID_FILL,color);

bar(x,y,x+32,y+15);

}

}

sleep(1);

}

/* 关闭图形 */

void closegr() {

cleardevice();

closegraph();

C语言乒乓球游戏源码

}

/* 游戏结束 */

void end() {

cleardevice();

setbkcolor(0);

switch(k) {

case 1:

setcolor(RED);

settextstyle(0,0,3);

outtextxy(200,150,"YOU LOST !!");

itoa(num,strnum,10); /* 将num数字按十进制方式转换为对应的字符串 */

outtextxy(400,220,strnum); /* 输出当前分数 */

sleep(2);

cleardevice();

settextstyle(0,0,4);

outtextxy(180,220,"GAME OVER");

sleep(2);

break;

case 0:

setcolor(RED);

settextstyle(0,0,4);

outtextxy(180,220,"GAME OVER");

sleep(2);

break;

}

}

/* 爆裂效果 */

void bomb(int x,int y) {

int r1,i;

int pointX,pointY,point_color;

setcolor(YELLOW);

for(r1=1;r1<=4;r1++) {

circle(x+16,y+7,r1);

delay(1000);

}

delay(3000);

setcolor(RED);

for(r1=1;r1>=6;r1++) {

circle(x+16,y+7,r1);

delay(1000);

}

C语言乒乓球游戏源码

delay(3000);

setcolor(BLUE);

for(r1=6;r1>=1;r1--) {

circle(x+16,y+7,r1);

delay(1000);

}

for(i=1;i<=50;i++) {

point_color=rand()%15;

pointX=(rand()%32+x);

pointY=(rand()%15+y);

putpixel(pointX,pointY,point_color);

delay(1000);

}

setfillstyle(1,BLUE);

bar(x,y,x+32,y+15);

}

/* 开始游戏 */

void move() {

int key=0;

int i,j,boxX,boxY;

int ballX,ballY,dX=1,dY=1;

int barX=300,barY=400,x,y;

randomize();

ballX=rand()%620+10;

ballY=rand()%200+190;

for(;;) { /* 受侦察的指点.... */

/* 小球的运动 */

while(!kbhit()) {

if((ballX<=10)||(ballX>=630)) {

if(num<50) { /* 此判断用于修改小球的运行速度:X方向 */

dX=dX*(-1);

} else if((num>=50)||(num<=100)) {

/* 当分数超过50,低于100时,小球速度加快一倍:X方向 */ dX=dX*(-2);

} else if(num>100) {

dX=dX*(-3);

}

}

if((ballY<=10)||(ballY>=470)) {

if(num<50) { /* 此判断用于修改小球的运行速度:Y方向 */ dY=dY*(-1);

C语言乒乓球游戏源码

} else if((num>=50)||(num<=100)) {

/* 当分数超过50,低于100时,小球速度加快一倍:Y方向 */ dY=dY*(-2);

} else if(num>100) {

dY=dY*(-3);

}

}

setcolor(YELLOW);

circle(ballX+=dX,ballY-=dY,5);

setfillstyle(SOLID_FILL,YELLOW);

floodfill(ballX,ballY,YELLOW);

delay(2500);

setcolor(BLUE);

circle(ballX,ballY,5);

setfillstyle(SOLID_FILL,BLUE);

floodfill(ballX,ballY,BLUE);

/* 判断是否击中方块 */

for(boxY=0,i=0;boxY<=150;boxY=boxY+15,i++)

for(boxX=0,j=0;boxX<=640;boxX=boxX+32,j++) {

if((ballX<boxX+32)&&

(ballX>boxX)&&

((ballY<=(boxY+20))&&

(ballY>=boxY-5))&&

(a[i][j].key==0)) {

dY=dY*(-1);

setfillstyle(1,BLUE);

bar(boxX,boxY,boxX+32,boxY+15);

bomb(boxX,boxY);

a[i][j].key=1;

num=num+10; /* 击中方块给玩家加分 */ setcolor(BLUE);

settextstyle(0,0,3);

itoa(num,strnum,10); /* 将num数字按十进制方式转换为对应的字符串 */

gotoxy(500,420);

clreol();

outtextxy(500,420,"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");

outtextxy(500,420,"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");

outtextxy(500,420,"**********************************");

C语言乒乓球游戏源码

outtextxy(500,420,"1111111111111111111111111111111111");

outtextxy(500,420,"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");

outtextxy(500,420,"gggggggggggggggggggggggggggggggggg");

outtextxy(500,420,"HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH");

outtextxy(500,420,"RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR");

setcolor(RED);

outtextxy(500,420,strnum); /* 输出当前分数 */ switch(key) {

case 1:

i=i+1;

j=j+1;

break;

}

}

}

/* 判断反弹或出界 */

if((ballX>=barX)&&(ballX<=barX+60)&&(ballY>=390)) dY=dY*(-1);

if(((ballX<barX)||(ballX>barX+60))&&(ballY>410)) { sleep(1);

k=1;

return;

}

}

/* 球拍的运动 */

key=bioskey(0);

x=barX;

y=barY;

if(key==LEFT) {

barX-=10;

setfillstyle(SOLID_FILL,BLUE);

bar(x,y,x+60,y+4);

setfillstyle(SOLID_FILL,RED);

bar(barX,barY,barX+60,barY+4);

} else if(key==RIGHT) {

barX+=10;

setfillstyle(SOLID_FILL,BLUE);

C语言乒乓球游戏源码

bar(x,y,x+60,y+4);

setfillstyle(SOLID_FILL,RED); bar(barX,barY,barX+60,barY+4); } else if(key==ESC) {

k=0;

break;

}

}

}

void main() {

int b,c,d;

int i,j,x,y;

for(i=0,y=0;i<10;i++) {

x=0;

for(j=0;j<20;j++) {

a[i][j].x=x;

a[i][j].y=y;

a[i][j].key=0;

x=x+32;

}

y=y+15;

}

initgr();

picture();

move();

end();

closegr();

}

本文来源:https://www.bwwdw.com/article/cvvj.html

Top