資源簡介
C語言編寫的乒乓球游戲,人機(jī)對戰(zhàn),按W向上移動,按S向下移動。
代碼片段和文件信息
#include
#include
#include
#include
#include
#include
void?control(void*);
void?display(void*);
void?AI(void*);
void?physics(void*);
void?sound(void*);
int?player1_y=250;
int?player1_score=0;
int?player2_y=250;
int?player2_score=0;
int?ball_x=390;
int?ball_y=290;
int?ver_ball_x=1;
int?ver_ball_y=1;
bool?wav1=0;
void?main(void) //主程序
{
_beginthread(control0NULL);??? /********************************/
_beginthread(AI0NULL); /*??????????????????????????????*/
_beginthread(physics0NULL); /*????? ?啟動多線程?????*/
_beginthread(display0NULL); /*??????????????????????????????*/
_beginthread(sound0NULL); /********************************/
while(1)
{
Sleep(10000);?????????????????????//主程序延時
}
}
void?physics(void*) //碰撞效果線程
{
while(1)
{
ball_x+=ver_ball_x;
ball_y+=ver_ball_y;
if(ball_y<=0)
{
ball_y=0;
ver_ball_y=-ver_ball_y;
wav1=1;
}
if(ball_y>=580)
{
ball_y=580;
ver_ball_y=-ver_ball_y;
wav1=1;
}
if(ball_x<=20?&&?ball_y>player1_y-20?&&?ball_y<(player1_y+100))
{
ver_ball_x=-ver_ball_x;
wav1=1;
}
if(ball_x>=760?&&?ball_y>player2_y-20?&&?ball_y<(player2_y+100))
{
ver_ball_x=-ver_ball_x;
wav1=1;
}
if(ball_x<0)
{
ball_x=390;
ball_y=290;
ver_ball_x=-ver_ball_x;
player2_score++;
}
if(ball_x>780)
{
ball_x=390;
ball_y=290;
ver_ball_x=-ver_ball_x;
player1_score++;
}
Sleep(5);
}
}
void?control(void*) //控制模塊線程
{
char?key;
while(1)
{
key=getch();
switch(key)
{
case?‘w‘:player1_y-=20;break;
case?‘s‘:player1_y+=20;break;
default:break;
}
if(player1_y<0)
player1_y=0;
if(player1_y>500)
player1_y=500;
}
}
void?AI(void*) //對手行動線程
{
while(1)
{
if(ver_ball_x>0?&&ball_x>390)
{
if(player2_y+20>ball_y)
player2_y-=20;
if(player2_y+80 player2_y+=20;
if(player2_y<0)
player2_y=0;
if(player2_y>500)
player2_y=500;
}
Sleep(100);
}
}
void?display(void*) //圖形顯示線程
{
initgraph(800600);
char?temp_c[3];
LOGFONT?f;
getfont(&f);???????????????????????//?獲取當(dāng)前字體設(shè)置
f.lfHeight?=?32;???????????????????//?設(shè)置字體高度
strcpy(f.lfFaceName?“黑體“);??????//?設(shè)置字體
f.lfQuality?=?DEFAULT_QUALITY;?????//?設(shè)置輸出效果為無抗鋸齒
f.lfUnderline=0;???????????????????//設(shè)置下劃線
setfont(&f);???????????????????????//?設(shè)置字體樣式
setcolor(RGB(255255255));
while(1)
{
BeginBatchDraw();
setfillstyle(RGB(000));
bar(00800600);
setfillstyle(RGB(255255255));
bar(0player1_y20player1_y+100);
bar(780player2_y800player2_y+100);
bar(ball_xball_yball_x+20ball_y+20);
sprintf(temp_c“YOU:%d“player1_score);
outtextxy(25050temp_c);
sprintf(temp_c“CPU:%d“player2_score);
outtextxy(47050temp_c);
bar(3900410600);
EndBatchDraw();
Sleep(20);
- 上一篇:NextDate程序給出日期的下一天
- 下一篇:簡易詞法分析器——基于C語言
評論
共有 條評論