| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 819 人关注过本帖
标题:Tank!小游戏
只看楼主 加入收藏
Antwind
Rank: 2
等 级:论坛游民
帖 子:82
专家分:53
注 册:2010-7-11
结帖率:100%
收藏
 问题点数:0 回复次数:11 
Tank!小游戏
[local]1[/local]
#include<stdio.h>
#include<conio.h>
#include<math.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[5]; /*5个坦克的坐标和炮筒的方向,自己的为0号,敌方的为1至4号*/
struct                                     /****子弹的位置,方向************/
{
                int x;
                int y;
                int Dir;

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

        int i;
        init0();
        while(1)
        {

                dellbullet();
                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,k;
        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(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 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;
                  }
         }
}
看看哈:还不完整,我会接着优化的,指点指点啊!!!
搜索更多相关主题的帖子: 小游戏 
2011-07-12 09:35
Antwind
Rank: 2
等 级:论坛游民
帖 子:82
专家分:53
注 册:2010-7-11
收藏
得分:0 
回复 楼主 Antwind
005.zip (10.76 KB)

代码和EXE。


/*************我就是程序;程序就是我!******************/
2011-07-12 09:39
我不会抽烟
Rank: 1
等 级:新手上路
帖 子:13
专家分:8
注 册:2010-11-29
收藏
得分:0 
呵呵,看你的程序运行,才发现你是俄罗斯方块的作者。
2011-07-12 13:25
星辰雨恋
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2011-7-11
收藏
得分:0 
不错不错,要是小光标能去掉的话就更好了
2011-07-12 20:27
jhwlhks
Rank: 1
来 自:湖北
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-7-4
收藏
得分:0 
谢谢分享

学多少算多少了
2011-07-12 21:06
版主是SB
Rank: 2
等 级:禁止发言
帖 子:24
专家分:34
注 册:2011-7-12
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

vandychan版主是**, 你们懂的
2011-07-12 21:44
hack、小楠
Rank: 1
来 自:浙江省东阳市
等 级:新手上路
帖 子:5
专家分:3
注 册:2011-7-9
收藏
得分:0 
呵呵下来看看、
2011-07-12 22:19
hack、小楠
Rank: 1
来 自:浙江省东阳市
等 级:新手上路
帖 子:5
专家分:3
注 册:2011-7-9
收藏
得分:0 
好卡的呀、哎。建议以后别编这程序了。太郁闷了、
2011-07-12 22:28
Antwind
Rank: 2
等 级:论坛游民
帖 子:82
专家分:53
注 册:2010-7-11
收藏
得分:0 
玩玩啊,呵呵。感觉挺爽的啊!以后在优化啊!!玩玩啊,呵呵。感觉挺爽的啊!以后在优化啊!!


/*************我就是程序;程序就是我!******************/
2011-07-13 00:16
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
I love Bug./.

我们都在路上。。。。。
2011-07-13 11:12
快速回复:Tank!小游戏
数据加载中...
 
   



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

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