outtextxy(x,y,s);in_in addr linux*)

这是什么问题啊,求大神指导!_c吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:86,171贴子:
这是什么问题啊,求大神指导!收藏
//俄罗斯方块游戏实现//预处理#include&stdio.h&#include&stdlib.h&#include&dos.h&#include&graphics.h&//宏定义#define
VK_LEFT 0x4b00#define
VK_RIGEHT 0x4d00#define
0x5000#define
VK_UP 0x4800#define
VK_ESC 0x011b#define
TIMER 0x1c
//设置中断号//定义常量#define MAX_BOX 19
//总共有十九种形态的方块#define BSIZE 20
//方块的边长是20个像素#define Sys_x 160
//显示方块界面的左上角X坐标#define Sys_y 25
//显示方块界面的左上角Y坐标#define Horizontal_boxs 10
//水平的方向以方块为单位的长度#define Vertical_boxs 15
//垂直的方向以方块为单位的长度,也就是说长是15个方块#define Begin_boxs_x Horizontal_boxs 2
//产生第一个方块时出现的起始位置#define FgColor 3
//前景颜色,如文字。2—green#define BgColor 0
//背景颜色 .0-blac#define LeftWin_x Sys_x+Horizontal_boxs*BSIZE+46
//右边状态栏的x坐标#define false 0
//#define true
1//移动的方向#define MoveLeft 1
//向左移动#define MoveRight 2
//向右移动#define MoveDown 3
//向下移动#define MoveRoll 4
//翻滚移动//定义全局变量int sys_x,sys_y;int current_box_
//保存当前方块编号 //x,y是保存方块的当前坐标的int Curbox_x=sys_x+Begin_boxs_x*BSIZE,Curbox_y=sys_y;
//x,y是保存方块的当前的坐标的
int flag_newbox=
//是否要产生新方块的标记 0int speed=0;
//下落速度int score=0;
//总分int speed_step=30;
//每等级所需要的分数 void interrupt (*oldtimer)(void);
//指向原来时钟中断处理过程入口的中断处理函数指针//定义结构体 //游戏底板结构,表示每个点多具有的属性struct BOARD{
//当前状态,只有0和1,1表示此点已被占用
//颜色,游戏底板的每个点可以拥有不同的颜色,增强美观性}Table_board[Vertical_boxs][Horizontal_boxs];
//方块结构strcut SHAPE{ char box[2]; /* 一位字节等于八位,每四位表示一个方块的一行 如: box【0】=“0x88”,box【1】=“0xc0” 表示的是: 1000 0000 1100 0000*/
//每个方块的颜色
//下个方块的编号};//初始化方块的内容struct SHAPE shapes[MAX_BOX]={ {0x88,
1}, {0xe8,
2}, {0xc4,
3}, {0x2e,
0}, {0x44,
5}, {0x8e,
6}, {0xc8,
0x80, MAGENTA,
7}, {0xe2,
0x0, MAGENTA,
4}, {0x8c,
9}, {0x6c,
8}, {0x4c,
11}, {0xc6,
10}, {0x4e,
13}, {0x8c,
14}, {0xe4,
15}, {0x4c,
12}, {0x88,
17}, {0xf0,
16}, {0xcc,
18},};//主函数void main(){ int GameOver=0; int key, int Currentaction=0;
//标记当前动作状态 int gd=VGA,gm=VGAHI, initgraph(&gd,&gm,&&); errorcode=graphresult(); if(errorcode != grOK) {
printf(&\n Notice:Graphics error : %s\n&,grapherrormsg(errorcode));
printf(&Press any key
to quit!&);
exit(1); } setbkcolor(BgColor); setcolor(FgColor); randomize(); SetTimer(newtimer); initialize(Sys_x,Sys_y,Horizontal_boxs,Vertical_boxs);
//初始化 nextbox=MKNextBox(-1); show_box(Curbox_x,Curbox_y,current_box_numb,shapes[current_box_numb].color); show_box(LeftWin_x,Curbox_y+200,nextbox,shapes[nextbox].color); show_intro(Sys_x,Curbox_y+320); getch(); while(1) {
/*Currentaction=0;
flag_newbox=
检测是否有按键*/
if (bioskey(1)){key=bisokey(0);
switch(key)
case VK_LEFT:
if(MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveLeft))
{EraseBox(Curbox_x,Curbox_y,current_box_numb);Curbox_x-=BSIZE;Currentaction=M}
case VK_RIGHT:
if(MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveRight))
{EraseBox(Curbox_x,Curbox_y,current_box_numb);Curbox_x+=BSIZE;Currentaction=MoveD}
else flag_newbox=
case Vk_DOWN:
if(MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveDown))
{EraseBox(Curbox_x,Curbox_y,current_box_numb);Curbox_y+BSIZE;Currentaction=MoveD}
else flag_newbox=
case VK_UP:
//旋转方块
if(MoveAble(Curbox_x,Curbox_y,shapes[current_box_numb].next,MoveRoll))
EraseBox(Curbox_x,Curbox_y,current_box_numb);current_box_numb=shapes[current_box_numb].
Currentaction=MoveR
case VK_ESC:
GameOver=1;
if(Currentaction)
//表示当前有动作,移动或转动
show_box(Curbox_x,Curbox_y,current_box_numb,shapes[current_box_numb].color);
Currentaction=0;
//按了向下键,但不能下移,就产生新的方块
if(flag_newbox)
//这时相当于方块底部了,把其中沾满一行的清去,置0
ErasePreBox(LeftWin_x,Sys_y+200,nextbox);
nextbox=MKNextBox(nextbox);
show_box(LeftWin_x,Curbox_y+200,nextbox,shapes[nextbox].color);
//刚一开始,游戏结束
if(!MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveDown))
show_box(Curbox_x,Curbox_y,current_box_numb,shapes[current_box_numb].color);
GameOver=1;
flag_newbox=
Currentaction=0;
//自由下落
if(Currentaction==MoveDown ||
TimerCounter& (20-speed*2))
if(MoveAble(Curbox_x,Curbox_y,current_box_numb,MoveDown))
EraseBox(Curbox_x,Curbox_y,current_box_numb);Curbox_y+=BSIZE;
show_box(Curbox_x,Curbox_y,current_box_numb,shapes[current_box_numb].color);
TimerCounter=0;
if(GameOver)
printf(&game over, thank
your score is %d&,score);
} } getch(); KillTimer(); closegraph();} /********初始化界面************/void initialize(int x,int y,int m,int n){ int i,j, oldx=x; for(j=0;j&n;j++) {
for(i=0;i&m;i++)
Table_board[j][i].var=0;
Table_board[j][i].color=BgC
line(x,y,x+BSIZE,y);
line(x,y,y+BSIZE);
line(x,y+BSIZE,x+BSIZE,y+BSIZE);
line(x+BSIZE,y,x+BSIZE,y+BSIZE);
x= } Curbox_x=x;
//x,y是保存方块的当前坐标的 Curbox_y=y;
flag_newbox=
//是否要产生新方块的标记 0 speed=0;
//下落速度 score=0;
//总分 ShowScore(score); ShowSpeed(speed);} //时钟中断处理void
interrupt newtimer(void){ (*oldtimer) (); TimerCounter++;}//设置新的时钟中断处理过程void SetTimer(void interrupt(*IntProc) (void)){ oldtimer=getvect(TIMER);
//获取中断号为TIMER的中断处理函数的入口地址 disable();
//设置新的时钟中断处理过程时,禁止所有中断 setvect(TIMER,IntProc);
/* 将中断号为TIMER的中断处理函数的入口地址改为IntProc()函数的入口地址 即中断发生时,将调用InrProc函数*/ enable();
//开启中断}void KillTimer(){ disable(); setvect(TIMER,oldtimer); enable();} //更新速度和成绩,显示帮助信息//显示分数void ShowScore(int score){ int x,y; char score_str[5];
//保存游戏得分 setfillstyle(SOLID_FILL,BgColor); x=LeftWin_x; y=100; bar(X-BSIZE,y,x+BSIZE*3,y+BSIZE*3); sprintf(score_str,&%3d&,score); outtextxy(x,y,&SCORE&); outtextxy(x,y+10,score_str);}//显示速度void ShowSpeed(int speed){ int x,y; char speed_str[5];
//保存速度值 setfillstyle(SOLID_FILL,BgColor); x=LeftWinz_x; y=150; bar(x-BSIZE,y,x+BSIZE*3,y+BSIZE*3); //确定一个以(x1,y1)为左上角,(x2,y2)为右下角的矩形窗口,再按规定图模和颜色填充 sprintf(speed_str,&%3d&,speed+1); outtextxy(x,y,&Level&); outtextxy(x,y+10,speed_str); //输出字符串指针speed—str所指的文本在规定的(x,y)位置 outtextxy(x,y+50,&Nextbox&);}void show_help(int xs,int ys){ char stemp[50]; setcolor(15); rectangel(xs,ys,xs+239,ys+100); sprintf(stemp,&-Roll -Downwards&); stemp[0]=24; stemp[8]=25; setcolor(14); outtextxy(xs+40,ys+30,stemp); sprintf(stemp,&-Turn
Right&); stemp[0]=27; stemp[13]=26; outtextxy(xs+40,ys+45,stemp); outtextxy(xs+40,ys+60,&Esc-Exit&); setcolor(FgColor);}
//满行处理//删除一行满的情况
这里的y为具体哪一行为满int DelFllRow(int y){ //该行游戏板下移一行 int n,top=0;
//top保存的是当前最高点,出现一行全空就表示为最高点了,移动到最高点结束 register
m, for(n=y;n&=0;n--) {
for(m=0;m&Horizontal_m++)
if(!Table_board[n][m].var)totoal++;
//没占方格+1
//上行不等于下行就把上行传给下行xor关系
if(Table_board[n][m].var!=Table_board[n-1][m].var)
Table_board[n][m].var=Table_board[n-1][m].
Table_board[n][m].color=Table_board[n-1][m].
if(totoal==Horizontal_boxs)
//发现上面有连续的空行提前结束
} } return(top);
//返回最高点}//找到一行满的情况void setFullRow(int t_boardy){ int n,full_numb=0,
//top保存的是当前方块的最高点 for(n=t_boardy+3;n&=t_n--) {
||n&=Vertical_boxs){}
//超过低线了
for(m=0;m&Horizontal_m++)
//水平的方向
//如果有一个是空就跳过该行
if(!Table_board[n+full_numb][m].var)
if(m==Horizomtal_boxs)
//找到满行了
if(n==t_boardy+3)
//如果是满行的最高行
top=DelFullRow(n+full_numb);
//清除游戏板里的该行,并下移数据
DelFullRow(n+full_numb);
full_numb++;
//统计找到的行数
} if(full_numb) {
int oldx,x=Sys_x,y=BSIZE*top+Sys_y;
score=score+full_numb*10;
//这里相当于重显调色板
for(n=n&t_boardy+4;n++)
if(n&=Vertical_boxs)
//超过底线了
for(m=0;m&Horizontal_m++)
//水平的方向
if(Table_board[n][m].var)
setfillstyle(SOLID_FILL,Table_board[n][m].color);
setfillstyle(SOLID_FILL,BgColor);
bar(x,y,x+BSIZE,y+BSIZE);
line(x,y,x+BSIZE,y);
line(x,y,y+BSIZE);
line(x,y+BSIZE,x+BSIZE,y+BSIZE);
line(x+BSIZE,y,x+BSIZE,y+BSIZE);
ShowScore(score);
if(speed!score/speed_step)
{speed=score/speed_ShowSpeed(speed);}
else {ShowSpeed(speed);}
} }} //显示|消除方块void show_box(int x,int y,int box_numb,int
color){ int i,ii,ls_x=x; if(box_numb&0
|| box_numb&=MAX_BOX)
//指定的方块不存在
box_numb=MAX_BOX/2; setfillstyle(SOLID_FILL,color); /*************************** *
移位来判断哪一位是1 *
方块是每一行用来半个字节来表示 *
0000b ***************************/ for(ii=0;ii&2;ii++) {
int mask=128;
for(i=0;i&8;i++)
if(i%4==0 && i!=0)
if((shapes[box_numb].box[ii])&mask)
bar(x,y,x+BSIZE,y+BSIZE);
line(x,y,x+BSIZE,y);
line(x,y,x,y+BSIZE);
line(x,y+BSIZE,x+BSIZE,y+BSIZE);
line(x+BSIZE,y,x+BSIZE,y+BSIZE);
} } //擦除(x,y)位置的开始的编号为box—numb的box void EraseBox(int x,int y,int box_numb) {
int mask=128,t_boardx,t_boardy,n,m;
setfillstyle(SOLID_FILL,BgColor);
for(n=0;n&4;n++)
for(m=0;m&4;m++)
if(((shapes[box_numb].box[n/2]) & mask))
bar(x+m*BSIZE,y+n*BSIZE,x+m*BSIZE+BSIZE,y+n*BSIZE+BSIZE);
line(x+m*BSIZE,y+n*BSIZE,x+m*BSIZE+BSIZE,y+n*BSIZE);
line(x+m*BSIZE,y+n*BSIZE,x+m*BSIZE,y+n*BSIZE+BSIZE);
line(x+m*BSIZE,y+n*BSIZE+BSIZE,x+m*BSZIE+BSIZE,y+n*BSIZE+BSIZE);line(x+m*BSIZE+BSIZE,y+n*BSIZE,x+m*BSIZE+BSIZE,y+n*BSIZE+BSIZE);
mask=(mask)/(2);
if(mask==0)mask=128;
} } //将新形状的方块放置在游戏板上,并返回此方块 int MkNextBox(int box_numb) {
int mask=128,t_boardx,t_boardy,n,m;
t_boardx=(Curbox_x-Sys_x)/BSIZE;
t_boardy=(Curbox_y-Sys_y)/BSIZE;
for(n=0;n&4;n++)
for(m=0;m&4;m++)
if(((shapes[current_box_numb].box[n/2])& mask))
Table_board[t_boardy+n][t_boardx+m].var=1;//这里设置游戏板
//在此设置游戏板
Table_board[t_boardy+n][t_boardx+m].color=shapes[current_box_numb].
mask=mask/(2);
if(mask==0)mask=128;
setFullRow(t_boardy);
Curbox_x=Sys_x+Begin_boxs_*BSIZE,Curbox_y=Sys_y;
//再次初始化坐标
if(box_numb==-1)
box_numb=rand()%MAX_BOX;
current_box_numb=box_
flag_newbox=
return(rand)% MAX_BOX; } //对方块的操作处理 int MoveAble(int x,int y,int box_numb,int direction) {
//t_boardx
是当前方块最左边在游戏板的位置
int n,m,t_boardx,t_
if(direction==MoveLeft)
t_boardx=(x-Sys_x)/BSIZE;
t_boardy=(y-Sys_y)/BSIZE;
for(n=0;n&4;n++)
for(m=0;m&4;m++)
//如果最左边有方块并且当前游戏版也有方块
if((shapes[box_numb].box[n/2]) & mask)
if((x+BSIZE *m)&Sys_x)
return(flase);
//如果碰到最左边了
//左移一个方快后,此4*4的区域与游戏版有冲突
else if(Table_board[t_boardy+n][t_board+m].var)
return(false);
mask=mask/(2);
if(mask==0)mask=128;
return(true);
if(direction==MoveRight)
t_boardx=(x-Sys_x)/BSIZE;
t_boardy=(y-Sys_y)/BSIZE;
for(n=0;n&4;n++)
for(m=0;m&4;m++)
//如果最右边有方块并且当前游戏版也有方块
if((shapes[box_numb].box[n/2]) & mask)
//如果碰到最右边了
if((x+BSIZE*m)&=(Sys_x+BSIZE*Horizontal_boxs))
return(false);
if(Table_board[t_boardy+n][t_boardx+m].var)
return(false);
mask=mask/(2);
if(mask==0)mask=128;
return(true);
if(direction==MoveDown)
t_boardx=(x-Sys_x)/BSIZE;
t_boardy=(y-Sys_y)/BSIZE;
for(n=0;n&4;n++)
for(m=0;m&4;m++)
//最下边有方块并且当前游戏版也有方块
if((shapes[box_numb].box[n/2]),&mask)
if((y+BSIZE*n)&=(Sys_y+BSIZE*Vertical_boxs) ||Table_board[t_boardy+n][t_boardx+m].var)
flag_newbox=
mask=mask/(2);
//mask依次为:00
if(mask==0)mask=128;
if(flag_newbox)
return(flase);
return(true);
else if(direction==MoveRoll)
t_boardx=(x-Sys_x)/BSIZE;
t_boardy=(y-Sys_y)/BSIZE;
for(n=0;n&4;n++)
for(m=0;m&4;m++)
//如果最下边有方块并且当前游戏版也有方块
if((shapes[box_numb].box[n/2]) & mask)
//如果碰到最下边了
if((y+BSIZE*n)&=(Sys_y+BSIZE*Vertical_boxs))
return(flase);
//如果碰到最左边了
if((x+BSIZE*n)&=(Sys_x+BSIZE*Horizontal_boxs))
return(flase);
//如果碰到最右边了
if((x+BSIZE*m)&=(Sys_x+BSIZE*Horizontal_boxs))
return(false);
else if(Table_board[t_boardy+n][t_boardx+m].var)
return(false);
mask=mask/(2);
if(mask==0)mask=128;
return(true);
return(false);
--------------------Configuration: 346 - Win32 Debug--------------------Compiling...348.cppD:\c语言实验\348.cpp(9) : warning C4005: *VK_LEFT* : macro redefinition
d:\microsoft visual studio\vc98\include\winuser.h(358) : see previous definition of *VK_LEFT*D:\c语言实验\348.cpp(11) : warning C4005: *VK_DOWN* : macro redefinition
d:\microsoft visual studio\vc98\include\winuser.h(361) : see previous definition of *VK_DOWN*D:\c语言实验\348.cpp(12) : warning C4005: *VK_UP* : macro redefinition
d:\microsoft visual studio\vc98\include\winuser.h(359) : see previous definition of *VK_UP*D:\c语言实验\348.cpp(46) : error C2143: syntax error : missing *;* before *constant*D:\c语言实验\348.cpp(46) : fatal error C1004: unexpected end of file found执行 cl.exe 时出错.348.obj - 1 error(s), 0 warning(s)
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或outtextxy_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
上传于||文档简介
&&V​S03​ ​ ​o​u​t​t​e​x​t​x​y​(​)​和​ ​_​s​t​p​r​i​n​t​f​_​s​(​)​的​用​法
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 struct in addr 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信