| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 525 人关注过本帖, 1 人收藏
标题:Tanks!小游戏,升级版!
只看楼主 加入收藏
Antwind
Rank: 2
等 级:论坛游民
帖 子:82
专家分:53
注 册:2010-7-11
结帖率:100%
收藏(1)
 问题点数:0 回复次数:7 
Tanks!小游戏,升级版!
006.rar (23.85 KB)

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
#define LEFT  0x4b00
#define RIGHT 0x4d00
#define UP    0x4800
#define DOWN  0x5000
#define ENTER   0x1c0d
#define ESC   0x011b
struct
{
     struct   add
     {
                int x;
                int y;

     } a[6];
     enum
     {
           North,South,Weast,East
     }Dir;
}tank[2]; /*5个坦克的坐标和炮筒的方向,自己的为0号,敌方的为1至4号*/
struct                                     /****子弹的位置,方向************/
{
                int x;
                int y;
                int Dir;

}bullet[100];
int score=0;                              /**************得分*************/
int ko1=1;
int num=0;                              /********子弹的个数**********************/
void begin();                                  /*打印开始界面提示*/
void init0();                         /*********初始化自己的战车**********************/
void init1(int);
void prin();                           /***************打印游戏界面,战车,子弹***********************/
void keyboard();                      /**********键盘扫描函数控制自己的战车*****************************/
void left();                    /**************战车左转**********************/
void right();                     /**************战车右转**********************/
void up();                        /**************战车向上走**********************/
void down();                      /**************战车向下走**********************/
void game();                        /**************游戏主函数**********************/
void byebye();                     /************退出游戏**********************/
void shoot();                     /************射击,打击敌方**********************/
void kill();
void onesmore();
void brief();                        /***********操作简介**********************/
void dellbullet();              /*************处理子弹********************/
/************************************************************************************/
/*********************************************************************************/
/**********************************************************************************/
void main()
{
        begin();
        brief();
        onesmore();
        getch();
}
/*********************************************************************************/
/************************************************************************************/
/*********************************************************************************/
/**********************************************************************************/
void game()                       /*************游戏主函数**********************/
{

        int i;


        while(ko1)
        {

                dellbullet();
                kill();
                prin();
                keyboard();
                for(i=80;i>0;i--)
                        delay(1000);
               
         }
}
/*********************************************************************************/
/************************************************************************************/
/*********************************************************************************/
/**********************************************************************************/
void begin()                 /*打印开始界面提示*/
{
        
        textmode(C80);
        window(1,1,80,25);
        textbackground(GREEN);
        textcolor(YELLOW);
        clrscr();
        gotoxy(15,10);
        cprintf("Welcome to this game");
        gotoxy(15,11);
        cprintf("TANKS");
        gotoxy(15,13);
        cprintf("Are you Ready");
        gotoxy(15,14);
        cprintf("Let's Go!");
        gotoxy(15,19) ;
        cprintf("Press anykey to begin");
        getch();
}
/************************************************************************************/
/*********************************************************************************/
/**********************************************************************************/
void prin()                        /*************打印游戏界面,战车,子弹**********************/
{
        int i,j;
        clrscr();
        window(1,1,80,25);
        gotoxy(35,1);
        cprintf("Score:");
        gotoxy(42,1);
        cprintf("%d,%d",score,num);
        for(i=1;i<=80;i++)                 /**********游戏界面**********************/
        {
                gotoxy(i,2);
                putch(4);
        }
        for(i=0;i<=5;i++)                   /***********打印主战车**********************/
        {
                gotoxy(tank[0].a[i].x,tank[0].a[i].y);
                putch(3);

        }
        if(ko1)
        {

                for(i=0;i<=5;i++)
                {
                        gotoxy(tank[1].a[i].x,tank[1].a[i].y);
                        putch(3);

                }
        }
        if(num>=1)
                for(i=1;i<=num;i++)
                {                                        /***********打印子弹**********************/
                        gotoxy(bullet[i].x,bullet[i].y);
                        putch(2);
 
                 }
        
}
/************************************************************************************/
/*********************************************************************************/
/**********************************************************************************/
void  init0()                                  /******主战车的初始化位置**********************/
{
                        tank[0].a[0].x=40;  tank[0].a[0].y=12;              /******  0  ****/
                        tank[0].a[1].x=40;  tank[0].a[1].y=11;              /*****  000 ******/
                        tank[0].a[2].x=39;  tank[0].a[2].y=12;              /*****  0 0 ******/
                        tank[0].a[3].x=41;  tank[0].a[3].y=12;
                        tank[0].a[4].x=39;  tank[0].a[4].y=13;
                        tank[0].a[5].x=41;  tank[0].a[5].y=13;
                        tank[0].Dir=0;

}
void  init1(int j)
{
        
               switch(j)
               {
                        case  0:
                                        tank[1].a[0].x=2;  tank[1].a[0].y=24;
                                        tank[1].a[1].x=2;  tank[1].a[1].y=23;
                                        tank[1].a[2].x=1;  tank[1].a[2].y=24;
                                        tank[1].a[3].x=3;  tank[1].a[3].y=24;
                                        tank[1].a[4].x=1;  tank[1].a[4].y=25;
                                        tank[1].a[5].x=3;  tank[1].a[5].y=25;
                                        tank[1].Dir=0;
                                        break;
                        case  1:
                                        tank[1].a[0].x=2;  tank[1].a[0].y=4;
                                        tank[1].a[1].x=2;  tank[1].a[1].y=3;
                                        tank[1].a[2].x=1;  tank[1].a[2].y=4;
                                        tank[1].a[3].x=3;  tank[1].a[3].y=4;
                                        tank[1].a[4].x=1;  tank[1].a[4].y=5;
                                        tank[1].a[5].x=3;  tank[1].a[5].y=5;
                                        tank[1].Dir=0;
                                        break;
                       case   2:
                                        tank[1].a[0].x=79;  tank[1].a[0].y=24;
                                        tank[1].a[1].x=79;  tank[1].a[1].y=23;
                                        tank[1].a[2].x=78;  tank[1].a[2].y=24;
                                        tank[1].a[3].x=80;  tank[1].a[3].y=24;
                                        tank[1].a[4].x=78;  tank[1].a[4].y=25;
                                        tank[1].a[5].x=80;  tank[1].a[5].y=25;
                                        tank[1].Dir=0;
                                        break;
                       case  3:
                                        tank[1].a[0].x=79;  tank[1].a[0].y=4;
                                        tank[1].a[1].x=79;  tank[1].a[1].y=3;
                                        tank[1].a[2].x=78;  tank[1].a[2].y=4;
                                        tank[1].a[3].x=80;  tank[1].a[3].y=4;
                                        tank[1].a[4].x=78;  tank[1].a[4].y=5;
                                        tank[1].a[5].x=80;  tank[1].a[5].y=5;
                                        tank[1].Dir=0;
                                        break;
                                       
                }
}

/**********************************************************************************/
/**********************************************************************************/
/**********************************************************************************/
void keyboard()                         /***********键盘扫描函数*********************/
{
        int key;
        if( kbhit())
        {
                        key=bioskey(0);

                        switch(key)
                        {
                                 case LEFT :
                                                   left();
                                                   break;
                                 case  RIGHT:
                                                   right();
                                                   break;
                                 case  UP:
                                                   up();
                                                   break;
                                 case  DOWN:
                                                   down();
                                                   break;
                                case  ENTER:
                                                   shoot();
                                                   break;
                                case   ESC:
                                                    byebye();
                                                    break;
                        } /*选择方向的switch*/
         }/*检查是否有按键if */
}/*子函数keyboard               */
/************************************************************************************/
/*********************************************************************************/
/**********************************************************************************/
void left()                               /**************战车左转**********************/
{
        

        tank[0].a[1].x=tank[0].a[0].x-1;  tank[0].a[1].y=tank[0].a[0].y;
        tank[0].a[2].x=tank[0].a[0].x;    tank[0].a[2].y=tank[0].a[0].y+1;
        tank[0].a[3].x=tank[0].a[0].x;    tank[0].a[3].y=tank[0].a[0].y-1;
        tank[0].a[4].x=tank[0].a[0].x+1;  tank[0].a[4].y=tank[0].a[0].y+1;
        tank[0].a[5].x=tank[0].a[0].x+1;  tank[0].a[5].y=tank[0].a[0].y-1;
        tank[0].Dir=2;
        if(tank[0].a[1].x-1>=1)
        {
                tank[0].a[0].x--;
                tank[0].a[1].x--;
                tank[0].a[2].x--;
                tank[0].a[3].x--;
                tank[0].a[4].x--;
                tank[0].a[5].x--;

        }
               

}
/********************************************************************************************/
/*************************************************************************************/
/************************************************************************************/
void byebye()
{                                                        /******打印结束界面***********/
        window(1,1,80,25) ;
        textmode(C80);
        textattr(GREEN+BLUE<<4);
        clrscr();
        gotoxy(30,12);
        cprintf("The game is over!");
        gotoxy(25,14);
        cprintf("score-%d",score);
        getch();
        while(1);
}
void down()                       /**************战车向下走**********************/
{


        tank[0].a[1].x=tank[0].a[0].x;      tank[0].a[1].y=tank[0].a[0].y+1;
        tank[0].a[2].x=tank[0].a[0].x+1;    tank[0].a[2].y=tank[0].a[0].y;
        tank[0].a[3].x=tank[0].a[0].x-1;    tank[0].a[3].y=tank[0].a[0].y;
        tank[0].a[4].x=tank[0].a[0].x+1;    tank[0].a[4].y=tank[0].a[0].y-1;
        tank[0].a[5].x=tank[0].a[0].x-1;    tank[0].a[5].y=tank[0].a[0].y-1;
        tank[0].Dir=1;
        if(tank[0].a[1].y+1<=25)
        {
                tank[0].a[0].y++;
                tank[0].a[1].y++;
                tank[0].a[2].y++;
                tank[0].a[3].y++;
                tank[0].a[4].y++;
                tank[0].a[5].y++;

        }
               
}
void up()                         /*************战车向上走**********************/
{
        tank[0].a[1].x=tank[0].a[0].x;      tank[0].a[1].y=tank[0].a[0].y-1;
        tank[0].a[2].x=tank[0].a[0].x-1;    tank[0].a[2].y=tank[0].a[0].y;
        tank[0].a[3].x=tank[0].a[0].x+1;    tank[0].a[3].y=tank[0].a[0].y;
        tank[0].a[4].x=tank[0].a[0].x-1;    tank[0].a[4].y=tank[0].a[0].y+1;
        tank[0].a[5].x=tank[0].a[0].x+1;    tank[0].a[5].y=tank[0].a[0].y+1;
        tank[0].Dir=0;
        if(tank[0].a[1].y-1>=3)
        {
                tank[0].a[0].y--;
                tank[0].a[1].y--;
                tank[0].a[2].y--;
                tank[0].a[3].y--;
                tank[0].a[4].y--;
                tank[0].a[5].y--;
        
        }
               
}
void right()                              /**************战车右转**********************/
{

        tank[0].a[1].x=tank[0].a[0].x+1;  tank[0].a[1].y=tank[0].a[0].y;
        tank[0].a[2].x=tank[0].a[0].x;    tank[0].a[2].y=tank[0].a[0].y-1;
        tank[0].a[3].x=tank[0].a[0].x;    tank[0].a[3].y=tank[0].a[0].y+1;
        tank[0].a[4].x=tank[0].a[0].x-1;  tank[0].a[4].y=tank[0].a[0].y-1;
        tank[0].a[5].x=tank[0].a[0].x-1;  tank[0].a[5].y=tank[0].a[0].y+1;
        tank[0].Dir=3;
        if(tank[0].a[1].x+1<=80)
        {
                tank[0].a[0].x++;
                tank[0].a[1].x++;
                tank[0].a[2].x++;
                tank[0].a[3].x++;
                tank[0].a[4].x++;
                tank[0].a[5].x++;
        
        }
               
}
void shoot()                      /**************战车射击,攻击敌方**********************/
{
        num++;
        bullet[num].x=tank[0].a[1].x;
        bullet[num].y=tank[0].a[1].y;
        switch(tank[0].Dir)
        {
                case 0:
                                bullet[num].Dir=0;
                                break;
                case 1:
                                bullet[num].Dir=1;
                                break;
                case 2:
                                bullet[num].Dir=2;
                                break;
                case 3:
                                bullet[num].Dir=3;
                                break;
                                          
        }


}

void brief()               /*************操作简介**********************/
{
        window(1,1,80,25);
        textbackground(GREEN);
        textcolor(YELLOW);
        clrscr();
        gotoxy(39,10);
        cprintf("Brief!");
        gotoxy(30,11);
        cprintf("ESC    :     quit!");
        gotoxy(30,13);
        cprintf("ENTER  :     shoot!");
        gotoxy(40,15);
        putch(30);
        gotoxy(39,16) ;
        putch(17);
        gotoxy(41,16);
        putch(16);
        gotoxy(40,17);
        putch(31);
        getch();

}
void  dellbullet()
{

      int i,j;
      for(i=1;i<=num;i++)          /*************子弹前进**********************/
        {


              switch(bullet[i].Dir)
              {
                                 case  0 :   bullet[i].y--; break;
                                 case  1 :   bullet[i].y++; break;
                                 case  2 :   bullet[i].x--; break;
                                 case  3 :   bullet[i].x++; break;
              }

        }
        for(i=1;i<=num;i++)                           /*************超出界面的子弹,不打印释内存**********************/
        {
                if(bullet[i].x<1||bullet[i].x>80||bullet[i].y<3||bullet[i].y>25)
                {
                        for(j=i+1;j<=num;j++)
                        {
                                bullet[j-1].x=bullet[j].x;
                                bullet[j-1].y=bullet[j].y;
                                bullet[j-1].Dir=bullet[j].Dir;

                        }
                        num--;
                        break;
                  }
         }
}
void kill()
{
        int i,j;
        if(!ko1)
        {
                return;
         }
        for(i=1;i<=num;i++)
        {

                for(j=0;j<=5;j++)
                {
                        if(bullet[i].x==tank[1].a[j].x&&bullet[i].y==tank[1].a[j].y)
                        {
                                ko1=0;

                                for(j=i+1;j<=num;j++)
                                {
                                        bullet[j-1].x=bullet[j].x;
                                        bullet[j-1].y=bullet[j].y;
                                        bullet[j-1].Dir=bullet[j].Dir;

                                }
                                num--;
                                return;
                        }

                }
        }
}
void onesmore()                               /******随机产生方块的形式**************************/
{
        int j;
        long i;
        init0();
        srand((int)time(0));
        for(i=0;i<10000;i++)
        {
                j=(int)(4.0*rand()/(RAND_MAX+1.0));
                init1(j);
                ko1=1;
                game();


        }

}
看看哈!!
指点指点!!
搜索更多相关主题的帖子: 小游戏 
2011-07-13 01:18
Antwind
Rank: 2
等 级:论坛游民
帖 子:82
专家分:53
注 册:2010-7-11
收藏
得分:0 
沙发我抢了啊!!嘿嘿!!


/*************我就是程序;程序就是我!******************/
2011-07-13 01:19
test_l
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-6-7
收藏
得分:0 
那我抢了神马。。。
2011-07-13 09:16
Antwind
Rank: 2
等 级:论坛游民
帖 子:82
专家分:53
注 册:2010-7-11
收藏
得分:0 
谢谢你啊!


/*************我就是程序;程序就是我!******************/
2011-07-13 09:24
星辰雨恋
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2011-7-11
收藏
得分:0 
测试了一下,有一个BUG耶:当对方在最右下角时候,自己开不到最下边,此时放子弹也不是从炮口出来  还是不错的
2011-07-13 10:50
麦海湘mhx
Rank: 2
等 级:论坛游民
帖 子:18
专家分:16
注 册:2011-6-9
收藏
得分:0 
我也抢了
2011-07-13 10:52
mandown1991
Rank: 4
等 级:业余侠客
帖 子:262
专家分:252
注 册:2011-3-2
收藏
得分:0 
支持顶上!
2011-07-13 11:05
mandown1991
Rank: 4
等 级:业余侠客
帖 子:262
专家分:252
注 册:2011-3-2
收藏
得分:0 
支持顶上!
2011-07-13 11:05
快速回复:Tanks!小游戏,升级版!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024845 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved