切换到宽版
  • 19523阅读
  • 25回复

c语言游戏代码 [复制链接]

上一主题 下一主题
离线郁闷的猪
 
只看楼主 倒序阅读 0 发表于: 2006-08-04
贪吃蛇
#define N 200
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
int i,key;
int score=0;/*得分*/
int gamespeed=50000;/*游戏速度自己调整*/
struct Food
{
  int x;/*食物的横坐标*/
  int y;/*食物的纵坐标*/
  int yes;/*判断是否要出现食物的变量*/
}food;/*食物的结构体*/
struct Snake
{
  int x[N];
  int y[N];
  int node;/*蛇的节数*/
  int direction;/*蛇移动方向*/
  int life;/* 蛇的生命,0活着,1死亡*/
}snake;
void Init(void);/*图形驱动*/
void Close(void);/*图形结束*/
void DrawK(void);/*开始画面*/
void GameOver(void);/*结束游戏*/
void GamePlay(void);/*玩游戏具体过程*/
void PrScore(void);/*输出成绩*/
/*主函数*/
void main(void)
{
  Init();/*图形驱动*/
  DrawK();/*开始画面*/
  GamePlay();/*玩游戏具体过程*/
  Close();/*图形结束*/
}
/*图形驱动*/
void Init(void)
{
  int gd=DETECT,gm;
  initgraph(&gd,&gm,"c:\\tc");
  cleardevice();
}
/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/
void DrawK(void)
{
/*setbkcolor(LIGHTGREEN);*/
  setcolor(11);
  setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/
  for(i=50;i<=600;i+=10)/*画围墙*/
  {
    rectangle(i,40,i+10,49); /*上边*/
    rectangle(i,451,i+10,460);/*下边*/
  }
for(i=40;i<=450;i+=10)
{
  rectangle(50,i,59,i+10); /*左边*/
  rectangle(601,i,610,i+10);/*右边*/
}
}
/*玩游戏具体过程*/
void GamePlay(void)
{
  randomize();/*随机数发生器*/
  food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/
  snake.life=0;/*活着*/
  snake.direction=1;/*方向往右*/
  snake.x[0]=100;snake.y[0]=100;/*蛇头*/
  snake.x[1]=110;snake.y[1]=100;
  snake.node=2;/*节数*/
  PrScore();/*输出得分*/
  while(1)/*可以重复玩游戏,压ESC键结束*/
  {
    while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/
    {
if(food.yes==1)/*需要出现新食物*/
{
  food.x=rand()%400+60;
  food.y=rand()%350+60;
  while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/
food.x++;
  while(food.y%10!=0)
food.y++;
food.yes=0;/*画面上有食物了*/
}
if(food.yes==0)/*画面上有食物了就要显示*/
{
        setcolor(GREEN);
        rectangle(food.x,food.y,food.x+10,food.y-10);
}
      for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/
      {
        snake.x=snake.x[i-1];
  snake.y=snake.y[i-1];
}
    /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/
switch(snake.direction)
{
  case 1:snake.x[0]+=10;break;
  case 2: snake.x[0]-=10;break;
  case 3: snake.y[0]-=10;break;
  case 4: snake.y[0]+=10;break;
}
for(i=3;i<snake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/
{
  if(snake.x==snake.x[0]&&snake.y==snake.y[0])
  {
          GameOver();/*显示失败*/
          snake.life=1;
          break;
  }
    }
if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||
  snake.y[0]>455)/*蛇是否撞到墙壁*/
{
  GameOver();/*本次游戏结束*/
  snake.life=1; /*蛇死*/
}
if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/
      break;
if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/
{
      setcolor(0);/*把画面上的食物东西去掉*/
      rectangle(food.x,food.y,food.x+10,food.y-10);
  snake.x[snake.node]=-20;snake.y[snake.node]=-20;
      /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/
  snake.node++;/*蛇的身体长一节*/
  food.yes=1;/*画面上需要出现新的食物*/
  score+=10;
  PrScore();/*输出新得分*/
}
setcolor(4);/*画出蛇*/
for(i=0;i<snake.node;i++)
  rectangle(snake.x,snake.y,snake.x+10,
          snake.y-10);
delay(gamespeed);
setcolor(0);/*用黑色去除蛇的的最后一节*/
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],
snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);
  } /*endwhile(!kbhit)*/
  if(snake.life==1)/*如果蛇死就跳出循环*/
    break;
  key=bioskey(0);/*接收按键*/
  if(key==ESC)/*按ESC键退出*/
    break;
  else
    if(key==UP&&snake.direction!=4)
/*判断是否往相反的方向移动*/
snake.direction=3;
    else
if(key==RIGHT&&snake.direction!=2)
  snake.direction=1;
else
  if(key==LEFT&&snake.direction!=1)
snake.direction=2;
  else
if(key==DOWN&&snake.direction!=3)
  snake.direction=4;
  }/*endwhile(1)*/
}
/*游戏结束*/
void GameOver(void)
{
  cleardevice();
  PrScore();
  setcolor(RED);
  settextstyle(0,0,4);
  outtextxy(200,200,"GAME OVER");
  getch();
}
/*输出成绩*/
void PrScore(void)
{  
  char str[10];
  setfillstyle(SOLID_FILL,YELLOW);
  bar(50,15,220,35);
  setcolor(6);
  settextstyle(0,0,2);
  sprintf(str,"score:%d",score);
  outtextxy(55,20,str);
}
/*图形结束*/
void Close(void)
{  
  getch();
  closegraph();
}
[ 此贴被cefly在2006-08-21 22:08重新编辑 ]
1条评分
dqllsc 威望 +5 - 2006-08-04
离线郁闷的猪
只看该作者 1 发表于: 2006-08-04
泡泡堂是这样编成的
#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#include <bios.h>
#include <dos.h>
#include <conio.h>


#define ESC   0x11b
#define UP   0x4800
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define ENTER 0x1c0d
#define SPACE 0x3920
#define TIMER 0x1c
#define W   0x1177  
#define S   0x1f73  
#define A   0x1e61  
#define D   0x2064


#define Player1_color CYAN
#define Player2_color LIGHTCYAN

#define Map_xy       9,9,461,401
#define P1info_xy     470,10,630,235
#define P2info_xy     470,245,630,470
#define Writerinfo_xy 9,410,461,470
#define BlastTime1   40
#define BlastTime2   55




/*/////////////////////********************\\\\\\\\\\\\\\\\\\\\\\\\*/
/*//                                         \\\*/
/*//   This is the global variable used in the programm     \\\*/
/*//                                         \\\*/
/*////////////////////**********************\\\\\\\\\\\\\\\\\\\\\\\*/





/***** Character's Attributes *****/
int Station_x[2]={0,0};
int Station_y[2]={0,0};     /* Character's station right now */
int life[2]={10,10};
int Relive1[2]={0,0};
int Relive2[2]={0,0};

/*****   bomb's Attributes   *****/

int powerx[2]={2,2}; int powery[2]={2,2};   /* The power of the player's bomb */
int Bombnumber[2]={1,1};           /* The number of the bomb player has now */
int Blastx[2][8]={{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}};
int Blasty[2][8]={{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}};
int BlastEnd[2][8]={{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}};

int TimeCounter[2][8]={{999,999,999,999,999,999,999,999},{999,999,999,999,999,999,999,999}};



int Gamestate=0;


int a[13][15]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},   /*****************************/
          {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},   /*   save the map station   */
          {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},   /* 0:moveplace 1:stone     */
          {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},   /* 2:wall     3:sign_a   */
          {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},   /* 4:sign_p   5:put_bomb   */
          {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},   /* 6:player1   7:player2   */
          {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};                       /* 8:blast_p           */
                                                      /*****************************/

int Map_bomb=8;       /* The max number of the item may appear in the map */
int Map_power=8;






/*/////////////////////********************\\\\\\\\\\\\\\\\\\\\\\\\*/
/*//                                         \\\*/
/*//       This is the function used in the programm       \\\*/
/*//                                         \\\*/
/*////////////////////**********************\\\\\\\\\\\\\\\\\\\\\\\*/





/***** TIMER interrupt function *****/

void interrupt newhandler();
void SetTimer(void interrupt (*IntProc)());
void KillTimer();


/***** picture function *****/

void DrawStar(void);
void InstallGraph(void);
void sign_addbomb(int x,int y);
void sign_addpower(int x,int y);
void wall(int x,int y);
void stone(int x,int y);
void character(int x,int y,int i);
void put_bomb(int x,int y);
void moveplace(int x,int y);
void blast_p(int x,int y);
void map1(void);


/***** action function *****/

void draw(int i,int j,int n);
void playinfo(void);
void cha_up(int i,int j,int p);
void cha_down(int i,int j,int p);
void cha_left(int i,int j,int p);
void cha_right(int i,int j,int p);
void lose(int p);
void play_die(int i);
void blast(int m,int j,int k,int p);
void c_blast(int i,int j);
int restartgame(void);
void play(void);




/*/////////////////////********************\\\\\\\\\\\\\\\\\\\\\\\\*/
/*//                                         \\\*/
/*//             programm     begain             \\\*/
/*//                                         \\\*/
/*////////////////////**********************\\\\\\\\\\\\\\\\\\\\\\\*/



(下面还有)
离线郁闷的猪
只看该作者 2 发表于: 2006-08-04
(接上)







void interrupt (*oldhandler)();

void interrupt newhandler()
{
int i,k;
 
for(k=0;k<2;k++)
for(i=0;i<8;i++){
TimeCounter[k]++;
if(TimeCounter[k]>2000) TimeCounter[k]=999;                        
if(TimeCounter[k]==BlastTime1) { blast(Blastx[k],Blasty[k],k,8);}             /* Time over */
if(TimeCounter[k]==BlastTime2) { blast(Blastx[k],Blasty[k],k,0);BlastEnd[k]=2;}   /*   BLUST */

}
oldhandler();
}


void SetTimer(void interrupt (*IntProc)())            
{
oldhandler=getvect(TIMER);
disable();
setvect(TIMER,IntProc);
enable();
}


void KillTimer()
{
disable();
setvect(TIMER,oldhandler);
enable();
}






void DrawStar(void)                       /* used as background,black back and some beautiful star */
{
int seed=2000;
int i,dotx,doty,height,width,color,maxcolor;
maxcolor=getmaxcolor();
width=getmaxx();
height=getmaxy();

srand(seed);
for(i=0;i<250;i++){
  dotx=i+random(width-1);
  doty=i+random(height-1);
  color=random(maxcolor);

  setcolor(color);
  putpixel(dotx,doty,color);
  circle(dotx+1,doty+1,1);
}
srand(seed);
}


void InstallGraph(void)                       /* start graphics mode */
{
int grdriver=DETECT;
int grmode;
int errorcode;
char *errormsg;
initgraph(&grdriver,&grmode,"D:\\Progra~1\\TC201E\\BGI");
errorcode=graphresult();
errormsg=grapherrormsg(errorcode);
if(errorcode!=grOk){
  printf("Graphics error:%s\n",errormsg);
  printf("You should check the path of BGIdriver\n");
  printf("Please input the right path in the function \"InstallGraph()\" and try again.\n");

printf("Press any key to exit.\n");
  getch();
  exit(1);
}
}

void sign_addbomb(int x,int y)             /* this function draw a sign which eated can add bomb number */
{
  setcolor(WHITE);
  rectangle(x+1,y+1,x+29,y+19);
  setfillstyle(6,WHITE);
  floodfill(x+10,y+10,WHITE);
  setcolor(DARKGRAY);
  circle(x+15,y+15,11);
  setfillstyle(1,DARKGRAY);
  floodfill(x+15,y+15,DARKGRAY);
  setcolor(RED);
  circle(x+15,y+15,4);
  setfillstyle(1,RED);
  floodfill(x+15,y+15,RED);
 
}


void sign_addpower(int x,int y)         /* this function draw a sign which eated can add bomb power */
{
  int a[8]={12,10,12,13,8,16,8,27};         /* x,y is the station of the pic.The other under is the same */
  int b[8]={18,10,18,13,22,16,22,27};
  int i;

  setcolor(WHITE);
  rectangle(x+1,y+1,x+29,y+29);

  setfillstyle(1,LIGHTRED);
  ellipse(x+15,y+7,0,360,4,2);
  floodfill(x+15,y+7,WHITE);

  for(i=0;i<6;i+=2){
moveto(x+a,y+a[i+1]);
lineto(x+a[i+2],y+a[i+3]);
moveto(x+b,y+b[i+1]);
lineto(x+b[i+2],y+b[i+3]);
  }
  moveto(x+a[6],y+a[7]);
  lineto(x+b[6],y+b[7]);
  setfillstyle(1,LIGHTGREEN);
  floodfill(x+15,y+15,WHITE);

  setfillstyle(10,WHITE);
  floodfill(x+1,y+1,WHITE);

}


void wall(int x,int y)             /* draw a wall which can be broken by a bomb blast */
{
  int i;
  setcolor(WHITE);

  rectangle(x+1,y+1,x+10,y+8);
rectangle(x+10,y+1,x+20,y+8);  
rectangle(x+20,y+1,x+29,y+8);

rectangle(x+1,y+8,x+6,y+15);  
rectangle(x+6,y+8,x+15,y+15);
rectangle(x+15,y+8,x+24,y+15);
rectangle(x+24,y+8,x+29,y+15);
离线郁闷的猪
只看该作者 3 发表于: 2006-08-04
(接上)
  rectangle(x+1,y+15,x+10,y+22);
rectangle(x+10,y+15,x+20,y+22);
rectangle(x+20,y+15,x+29,y+22);

rectangle(x+1,y+22,x+6,y+29);
rectangle(x+6,y+22,x+15,y+29);
rectangle(x+15,y+22,x+24,y+29);
rectangle(x+24,y+22,x+29,y+29);  
 
 


}

void stone(int x,int y)             /* draw a stone which can't be broken by a bomb blast */
{

  setfillstyle(6,YELLOW);
  bar(x+1,y+1,x+29,y+29);

}


void character(int x,int y,int i)     /* draw the player , i is the player NO. */
{

  setcolor(WHITE);
  circle(x+15,y+6,5);
  if(i==1)
    { setfillstyle(1,YELLOW);}
  else if(i==2)
    { setfillstyle(1,GREEN); }
  else return;
  floodfill(x+15,y+5,WHITE);  


  putpixel(x+13,y+5,RED);
  putpixel(x+17,y+5,RED);      

  moveto(x+15,y+12);
  lineto(x+15,y+19);
  moveto(x+15,y+12);
  lineto(x+8,y+20);
  moveto(x+15,y+12);
  lineto(x+22,y+20);
  moveto(x+15,y+20);
  lineto(x+8,y+30);
  moveto(x+15,y+20);
  lineto(x+22,y+30);

}

void put_bomb(int x,int y)               /* draw a bomb */
{
  setfillstyle(1,BLUE);
  bar(x,y,x+30,y+30);
  setcolor(DARKGRAY);
  setfillstyle(1,DARKGRAY);
  pieslice(x+15,y+15,0,360,14);
  setcolor(RED);
  setfillstyle(1,RED);
  pieslice(x+15,y+15,0,360,4);



}

void moveplace(int x,int y)            
{
  setcolor(BLUE);
  setfillstyle(1,BLUE);
  bar(x,y,x+30,y+30);
}


void blast_p(int x,int y)
{
  setcolor(13);
  setfillstyle(1,13);
  bar(x,y,x+30,y+30);
}


void draw(int i,int j,int n)
{  

int x,y;
  x=i*30+10;
  y=j*30+10;
  switch(n){
case 0 :   moveplace(x,y);a[j]=0;break;
case 1 :   stone(x,y);a[j]=1;break;
case 2 :   wall(x,y);a[j]=2;break;
case 3 :   sign_addbomb(x,y);a[j]=3;break;
case 4 :   sign_addpower(x,y);a[j]=4;break;
case 5 :   put_bomb(x,y);a[j]=5;break;  
case 6 :   character(x,y,1);a[j]=6;Station_x[0]=i;Station_y[0]=j;break;
case 7 :   character(x,y,2);a[j]=7;Station_x[1]=i;Station_y[1]=j;break;
case 8 :   blast_p(x,y);a[j]=8;break;
default :   break;
}
 
}  
 

void map1(void)
{  
  int b[13][15]={{6,0,2,2,2,2,2,0,0,2,2,2,2,0,0},{0,2,2,0,2,1,2,1,0,2,2,0,2,1,0},  
            {2,2,2,2,0,2,2,2,2,2,0,2,2,2,2},{2,1,2,2,2,2,2,1,2,1,2,1,2,1,2},  
            {2,2,2,2,0,2,2,2,2,2,2,2,2,2,2},{0,0,2,1,2,1,2,1,2,0,2,0,2,0,2},  
            {0,0,2,2,2,2,1,1,1,1,2,2,2,0,0},{2,2,2,0,2,1,1,1,1,1,2,1,2,2,2},  
            {2,2,2,2,0,2,2,2,0,2,2,2,0,2,2},{2,0,2,1,2,1,2,1,2,1,2,1,2,0,2},  
            {2,2,2,2,0,2,2,2,2,2,2,2,2,2,2},{0,2,2,2,2,1,0,0,2,2,2,1,2,0,0},  
            {0,0,2,2,2,2,0,0,0,2,2,2,2,0,7}};

  int i,j;
 
  setcolor(LIGHTBLUE);
  setbkcolor(BLUE);
  cleardevice();
  rectangle(Map_xy);


  for(j=0;j<13;j++)
  for(i=0;i<15;i++){

    a[j]=b[j];
    draw(i,j,a[j]);
if(a[j]==6) {Relive1[0]=i;Relive1[1]=j;}
if(a[j]==7) {Relive2[0]=i;Relive2[1]=j;}
  }


}

void map2(void)
{
  int b[13][15]={{2,2,2,2,0,0,0,2,0,0,0,2,2,2,2},{2,1,2,0,2,2,2,0,2,2,2,0,2,1,2},
  {2,2,0,2,0,2,0,2,0,2,0,2,0,2,2},{2,0,2,0,2,2,2,2,2,2,2,0,2,0,2},
            {2,0,2,2,2,2,2,2,2,2,2,2,2,0,2},{2,0,2,0,2,2,2,2,2,2,2,0,2,0,2},
            {2,0,2,2,2,2,1,1,1,2,2,2,2,0,2},{2,2,0,2,0,2,2,2,2,2,0,2,0,2,2},
            {2,2,2,0,2,2,2,2,2,2,2,0,2,2,2},{2,2,2,2,0,2,0,2,0,2,0,2,2,2,2},
            {2,2,0,2,2,0,2,2,2,0,2,2,0,2,2},{2,1,0,2,2,2,0,0,0,2,2,2,0,1,2},
            {2,0,6,2,2,2,2,2,2,2,2,2,7,0,2}};

  int i,j;

  setcolor(LIGHTBLUE);
  setbkcolor(BLUE);
  cleardevice();
  rectangle(Map_xy);


  for(j=0;j<13;j++)
  for(i=0;i<15;i++){

    a[j]=b[j];
    draw(i,j,a[j]);
if(a[j]==6) {Relive1[0]=i;Relive1[1]=j; }
if(a[j]==7) {Relive2[0]=i;Relive2[1]=j; }
  }

}

void playinfo(void)
{
  setcolor(LIGHTBLUE);
  rectangle(P1info_xy);
  rectangle(P2info_xy);
  rectangle(Writerinfo_xy);
  setcolor(WHITE);
  settextstyle(1,0,3);
  outtextxy(140,420,"Writer By : Gu Rui");
  settextstyle(0,0,1);
  outtextxy(40,460,"Wellcome to send mail to me:guruilong1983@sina.com");
}


void cha_up(int i,int j,int p)
{  
  int up_station;
  int n;
   
  if(p==1)     n=6;
  else if(p==2) n=7;
  else return;

  if(j<=0) return;
  up_station=a[j-1];
  switch(up_station){
    case 0 : break;
    case 1 :  
    case 2 : return;
    case 3 : Bombnumber[p-1]+=2;break;


      case 4 : powerx[p-1]+=3;powery[p-1]+=3;break;
    case 5 : return;
    case 6 :  
    case 7 : break;
    case 8 : play_die(p);break;
    default : return;
  }
  up_station=a[j];
  if(up_station!=5)
draw(i,j,0);
  draw(i,j-1,n);
}


void cha_down(int i,int j,int p)
{
  int up_station;
  int n;
   
  if(p==1)     n=6;
  else if(p==2) n=7;
  else return;

  if(j>=12) return;
  up_station=a[j+1];
  switch(up_station){
    case 0 : break;
    case 1 :  
    case 2 : return;
    case 3 : Bombnumber[p-1]+=2;break;
    case 4 : powerx[p-1]+=3;powery[p-1]+=3;break;
    case 5 : return;
    case 6 :  
    case 7 : break;
    case 8 : play_die(p);break;
    default : return;
  }
  up_station=a[j];
  if(up_station!=5)
draw(i,j,0);
  draw(i,j+1,n);
}


void cha_left(int i,int j,int p)
{
  int up_station;
  int n;
   
  if(p==1)     n=6;
  else if(p==2) n=7;
  else return;

  if(i<=0) return;
  up_station=a[j][i-1];
  switch(up_station){
    case 0 : break;
    case 1 :  

      case 2 : return;
    case 3 : Bombnumber[p-1]+=2;break;
    case 4 : powerx[p-1]+=3;powery[p-1]+=3;break;
    case 5 : return;
    case 6 :  
    case 7 : break;
    case 8 : play_die(p);break;
    default : return;
  }
  up_station=a[j];
  if(up_station!=5)
draw(i,j,0);
  draw(i-1,j,n);
}


void cha_right(int i,int j,int p)
{
  int up_station;
  int n;
   
  if(p==1)     n=6;
  else if(p==2) n=7;
  else return;

  if(i>=14) return;
  up_station=a[j][i+1];
  switch(up_station){
    case 0 : break;
    case 1 :  
    case 2 : return;
    case 3 : Bombnumber[p-1]+=2;break;
    case 4 : powerx[p-1]+=3;powery[p-1]+=3;break;
    case 5 : return;
    case 6 :  
    case 7 : break;
    case 8 : play_die(p);break;
    default : return;
  }
  up_station=a[j];
  if(up_station!=5)
draw(i,j,0);
draw(i+1,j,n);
}



void lose(int p)
{
  int m,n;
  int key;
  char *bbb;
for(m=0;m<2;m++)
for(n=0;n<8;n++){
TimeCounter[m][n]=999;
  }


  KillTimer();
  cleardevice();
  setbkcolor(BLACK);
  DrawStar();
  setcolor(RED);
  settextstyle(1,0,4);

  sprintf(bbb,"Player%d Is Loss",p);

  outtextxy(150,170,bbb);
  settextstyle(1,0,2);
  outtextxy(100,350,"Press ESC to quit,ENTER to restart game");

  Gamestate=1;
}

void play_die(int i)
{
  char *aaa;

  life[i-1]--;

  setcolor(LIGHTRED);
  settextstyle(1,0,1);
  setfillstyle(1,BLUE);
  if(life[i-1]==0) { lose(i);return; }
  if(i==1){
sprintf(aaa,"%d",life[0]);
bar(599,14,620,36);
outtextxy(600,15,aaa);

draw(Relive1[0],Relive1[1],6);


  }
  if(i==2){
sprintf(aaa,"%d",life[1]);
bar(599,250,620,270);
outtextxy(600,250,aaa);
draw(Relive2[0],Relive2[1],7);
  }
 
 
 

}

void c_blast(int i,int j)

{   int m,n;
  for(m=0;m<2;m++){
for(n=0;n<7;n++){
  if(Blastx[m][n]==i&&Blasty[m][n]==j){
TimeCounter[m][n]=BlastTime1-1;
return;
}
}
}
}


void blast(int i,int j,int k,int p)
{
  int station;
  int m;
  int ap;
  draw(i,j,p);
  for(m=1;m<=powerx[k];m++){
if(i+m>14) break;
else{
station=a[j][i+m];               /* right meet a item */
switch(station){
case 0 : if(p==8){draw(i+m,j,p);} break;
case 1 : m=powerx[k]+1;break;  
  case 2 : if(p==8){
draw(i+m,j,p);
}
if(p==0){
ap=random(4);
if(ap==1&&Map_bomb!=0){
draw(i+m,j,3);
Map_bomb--;
}
if(ap==2&&Map_power!=0){
draw(i+m,j,4);
Map_power--;
}
  }
  m=powerx[k]+1;break;  
case 3 :
case 4 : m=powerx[k]+1;break;
case 5 : c_blast(i+m,j);break;
case 6 : draw(i+m,j,p);play_die(1);break;
case 7 : draw(i+m,j,p);play_die(2);break;
case 8 : draw(i+m,j,p);break;
default : break;
}
}
  }

  for(m=1;m<=powerx[k];m++){
if(i-m<0) break;
else{
station=a[j][i-m];               /* left meet a item */
离线郁闷的猪
只看该作者 4 发表于: 2006-08-04
(接上)
switch(station){
case 0 : if(p==8){draw(i-m,j,p);}break;
case 1 : m=powerx[k]+1;break;  
case 2 : if(p==8){
draw(i-m,j,p);
}
if(p==0){
ap=random(10);
if(ap==4&&Map_bomb!=0){
draw(i-m,j,3);
Map_bomb--;
}
if(ap==8&&Map_power!=0){
draw(i-m,j,4);
Map_power--;
}
  }
  m=powerx[k]+1;break;  
case 3 :
case 4 : m=powerx[k]+1;break;
case 5 : c_blast(i-m,j);break;
case 6 : draw(i-m,j,p);play_die(1);break;
case 7 : draw(i-m,j,p);play_die(2);break;
case 8 : draw(i-m,j,p);break;
default : break;
}
}
  }

  for(m=1;m<=powery[k];m++){
if(j+m>12) break;
else{
station=a[j+m];               /* down meet a item */
switch(station){
case 0 : if(p==8){draw(i,j+m,p);}break;
case 1 : m=powery[k]+1;break;  
case 2 : if(p==8){
draw(i,j+m,p);
}
if(p==0){
ap=random(10);
if(ap==4&&Map_bomb!=0){
draw(i,j+m,3);
Map_bomb--;
}
if(ap==8&&Map_power!=0){
draw(i+m,j,4);
Map_power--;
}
  }
  m=powerx[k]+1;break;  
case 3 :
case 4 : m=powery[k]+1;break;
case 5 : c_blast(i,j+m);break;
case 6 : draw(i,j+m,p);play_die(1);break;
case 7 : draw(i,j+m,p);play_die(2);break;
case 8 : draw(i,j+m,p);break;
default : break;
}
}
  }

  for(m=1;m<=powery[k];m++){
if(j-m<0) break;
else{
station=a[j-m];               /* up meet a item */
switch(station){
case 0 : if(p==8){draw(i,j-m,p);}break;
case 1 : m=powery[k]+1;break;  
case 2 : if(p==8){
draw(i,j-m,p);
}
if(p==0){
ap=random(10);
if(ap==4&&Map_bomb!=0){
draw(i,j-m,3);
Map_bomb--;
}
if(ap==8&&Map_power!=0){
draw(i+m,j,4);
Map_power--;
}
  }
  m=powerx[k]+1;break;  
case 3 :
case 4 : m=powery[k]+1;break;
case 5 : c_blast(i,j-m);break;
case 6 : draw(i,j-m,p);play_die(1);break;
case 7 : draw(i,j-m,p);play_die(2);break;
case 8 : draw(i,j-m,p);break;
default : break;
}
}
  }



}


int restartgame(void)
{ int key;
  int i,j;
  Gamestate=0;

  for(i=0;i<2;i++){
  powerx=2;
  powery=2;
  Bombnumber=1;
  life=10;
}
for(j=0;j<2;j++)
for(i=0;i<8;i++){
Blastx[j]=0;Blasty[j]=0;
BlastEnd[j]=0;
TimeCounter[j]=999;
  }

Station_x[0]=0;
Station_x[1]=14;
Station_y[0]=0;  
Station_y[1]=12;

do{
  key=bioskey(0);
}while(key!=ESC&&key!=ENTER);
 
return key;
}

void begain_game()
{
  setbkcolor(LIGHTBLUE);
  DrawStar();
  setcolor(WHITE);
  settextstyle(1,0,6);
  outtextxy(1,100,"WELL COME TO PLAY BBD");
  settextstyle(1,0,3);
  outtextxy(140,240,"Please choose a map:");
  rectangle(140,280,280,400);
  rectangle(340,280,480,400);
  settextstyle(1,0,5);
  setcolor(YELLOW);
  outtextxy(200,310,"1");
  outtextxy(400,310,"2");
}
 
void play(void)
{
int x[2];
int y[2];
int bombx[2];
int bomby[2];
int bn[2];
int flag[2];
int i,j;
int play_key;


Loop1: InstallGraph();
    cleardevice();
     
    begain_game();
     
    while(1){  
      play_key=bioskey(0);
      switch(play_key){
      case 0x0231 :
      case 0x4f31 : map1();break;
      case 0x0332 :
离线郁闷的猪
只看该作者 5 发表于: 2006-08-04
(接上)
        case 0x5032 : map2();break;
      case 0x011b : return;
      default     : play_key=0;break;
      }
      if(play_key==0) continue;
      else break;
    }
     
    playinfo();
 
  setcolor(YELLOW);
  settextstyle(1,0,1);
outtextxy(480,15,"Player1 Life: ");
outtextxy(480,250,"Player2 Life: ");
  setcolor(LIGHTRED);
  outtextxy(600,15,"10");
  outtextxy(600,250,"10");
  SetTimer(newhandler);

for(i=0;i<2;i++){
x=0;y=0;bombx=0;
bomby=0;bn=1;flag=0;
}




while(1){
    play_key=bioskey(0);
  if(play_key!=0){
x[0]=Station_x[0];
y[0]=Station_y[0];
x[1]=Station_x[1];
y[1]=Station_y[1];
switch(play_key){
case W   : cha_up(x[0],y[0],1);break;
case S   : cha_down(x[0],y[0],1);break;
case A   : cha_left(x[0],y[0],1);break;
case D   : cha_right(x[0],y[0],1);break;
case UP   : cha_up(x[1],y[1],2);break;
case DOWN : cha_down(x[1],y[1],2);break;
case LEFT : cha_left(x[1],y[1],2);break;
case RIGHT : cha_right(x[1],y[1],2);break;
case ENTER : if(bn[1]<=Bombnumber[1]&&bn[1]<=8){
      draw(x[1],y[1],5);
      bombx[1]=x[1];bomby[1]=y[1];
      bn[1]++;
      flag[1]=1;
      }
        break;
case SPACE : if(bn[0]<=Bombnumber[0]&&bn[0]<=8){
      draw(x[0],y[0],5);
      bombx[0]=x[0];bomby[0]=y[0];
      bn[0]++;
      flag[0]=1;
      }
     
      break;
case ESC   : break;
}
    }

for(j=0;j<2;j++){
for(i=0;i<8;i++){
if(BlastEnd[j]==2) { bn[j]--;BlastEnd[j]=0;}
}
}

for(j=0;j<2;j++){
if(flag[j]==1) {
for(i=0;i<8;i++){
if(BlastEnd[j]==0){
TimeCounter[j]=0;
flag[j]=0;
Blastx[j]=bombx[j];
Blasty[j]=bomby[j];
BlastEnd[j]=1;
break;
}
}
}
    }
    if(Gamestate==1) {
play_key=restartgame();
if(play_key==ESC) break;
else goto Loop1;
    }
    if(play_key==ESC) break;
 
  }

  KillTimer();
  closegraph();
}

int main()
{
play();
return 0;
}
离线hcs1018
只看该作者 6 发表于: 2006-08-21
fff
离线r134a
只看该作者 7 发表于: 2006-08-21
引用第0楼郁闷的猪2006-08-04 09:23发表的“c语言游戏代码”:
浏览此贴需要威望



哎~~我没有那么高的威望!~~~又没有浏览权限~~~怎么办啊????
.


祝大家明年NOIP大获全盛!


.
离线cefly
只看该作者 8 发表于: 2006-08-21
贪吃蛇应该是我以前看到过的那个,,不过下面的就有点强悍了。。。呵呵,C是可以编操作系统的东西,,如果找到那个源码就霸道了~~~:)
离线cefly
只看该作者 9 发表于: 2006-08-21
引用第7楼北极星的眼泪2006-08-21 20:21发表的“”:
哎~~我没有那么高的威望!~~~又没有浏览权限~~~怎么办啊????


我觉得大家不应该把帖子搞得那么神秘,,再加上这是 新手版 就更没必要了。。。都看不到还发干什么?
快速回复
限100 字节
 
上一个 下一个