C语言写坦克大战笔记(二)

这篇博客记录了作者在C语言环境下,根据Data.h文件实现坦克移动和发射炮弹的过程。博客提到了#pragma once的用途,它是C/C++中防止头文件重复包含的手段。由于作者能力限制,仅使用了部分内容,对其他部分感到挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

老师在给出Data.h的情况下 让我们实现坦克的移动和发射炮弹。各种定义声明和全局变量。

每个Dada.h中最开头都需要有个#pragma once

这是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次。

#pragma once
// 字体显示相关
#define REVERSE    COMMON_LVB_REVERSE_VIDEO // 反色
#define UNDERSCORE COMMON_LVB_UNDERSCORE    // 下划线


// 字体颜色
#define F_BLUE     FOREGROUND_BLUE      // 深蓝
#define F_H_BLUE   0x0001|0x0008        // 亮蓝
#define F_GREEN    0x0002               // 深绿
#define F_H_GREEN  0x0002|0x0008        // 亮绿
#define F_RED      0x0004               // 深红
#define F_H_RED    0x0004|0x0008        // 亮红
#define F_YELLOW   0x0002|0x0004        // 深黄
#define F_H_YELLOW 0x0002|0x0004|0x0008 // 亮黄
#define F_PURPLE   0x0001|0x0004        // 深紫
#define F_H_PURPLE 0x0001|0x0004|0x0008 // 亮紫
#define F_CYAN     0x0002|0x0004        // 深青
#define F_H_CYAN   0x0002|0x0004|0x0008 // 亮青
#define F_WHITE    0x0004|0x0002|0x0001
#define F_H_WHITE  0x0004|0x0002|0x0001|0x0008


// 背景颜色
#define B_BLUE     BACKGROUND_BLUE      // 深蓝
#define B_H_BLUE   0x0010|0x0080        // 亮蓝
#define B_GREEN    0x0020               // 深绿
#define B_H_GREEN  0x0020|0x0080        // 亮绿
#define B_RED      0x0040               // 深红
#define B_H_RED    0x0040|0x0080        // 亮红
#define B_YELLOW   0x0020|0x0040        // 深黄
#define B_H_YELLOW 0x0020|0x0040|0x0080 // 亮黄
#define B_PURPLE   0x0010|0x0040        // 深紫
#define B_H_PURPLE 0x0010|0x0040|0x0080 // 亮紫
#define B_CYAN     0x0020|0x0040        // 深青
#define B_H_CYAN   0x0020|0x0040|0x0080 // 亮青
#define B_WHITE    0x0010|0x0020|0x0040
#define B_H_WHITE  0x0010|0x0020|0x0040|0x0080


/*
*        1       23           4                56          78
*  0x    0       00           0                00          00
*     对象类型 对象ID 坦克/炮弹/碰撞体积 运动方向/血值 显示控制
*/
typedef struct _OBJECT                                  //创造子弹的结构体
{


<span style="white-space:pre">	</span>unsigned int Direction; // 运动方向
<span style="white-space:pre">	</span>unsigned int x;
<span style="white-space:pre">	</span>bool isAlive; //有子弹能用的
<span style="white-space:pre">	</span>unsigned int y;
<span style="white-space:pre">	</span>unsigned int colorType;//颜色
<span style="white-space:pre">	</span>bool IsHave;
<span style="white-space:pre">	</span>bool IsFirstRun;


}Object, *pObject;


extern Object stcBulletArry[200];


typedef struct _CTANK                              //创造坦克的结构体
{
<span style="white-space:pre">	</span>unsigned int isstop;
<span style="white-space:pre">	</span>unsigned int Direction; // 运动方向
<span style="white-space:pre">	</span>unsigned int x;
<span style="white-space:pre">	</span>bool       chDead;
<span style="white-space:pre">	</span>unsigned int y;
<span style="white-space:pre">	</span>unsigned int colorType;//颜色
}Ctank, *pCtank;


#define TANK_BODY          0x10090011
#define TANK_STYLE_BODY    0x10090001 // ■ 坦克组成部分
#define TANK_STYLE_UP_L    0x10090002 // ◢  敌军坦克-上 
#define TANK_STYLE_UP_R    0x10090003 // ◣  敌军坦克-上
#define TANK_STYLE_DOWN_L  0x10090004 // ◤  敌军坦克-下
#define TANK_STYLE_DOWN_R  0x10090005 // ◥  敌军坦克-下
#define TANK_STYLE_LEFT_L  0x10090006 // ◥  敌军坦克-左
#define TANK_STYLE_LEFT_R  0x10090007 // ◢  敌军坦克-左
#define TANK_STYLE_RIGHT_L 0x10090008 // ◣  敌军坦克-右
#define TANK_STYLE_RIGHT_R 0x10090009 // ◤  敌军坦克-右
#define TANK_HEART         0x2
#define TANK_LEVEL_1       0x20090011 // ①  血量1
#define TANK_LEVEL_2       0x20090012 // ②  血量2
#define TANK_LEVEL_3       0x20090013 // ③  血量3
#define TANK_LEVEL_4       0x20090014 // ④  血量4
#define TANK_LEVEL_5       0x20090015 // ⑤  血量5
#define TANK_LEVEL_6       0x20090016 // ⑥  血量6
#define TANK_LEVEL_7       0x20090017 // ⑦  血量7
#define TANK_LEVEL_8       0x20090018 // ⑧  血量8
#define TANK_LEVEL_9       0x20090019 // ⑨  血量9
#define TANK_LEVEL_10      0x2009001A // ⑩  血量10


#define WALL_A_Type        0x5
#define WALL_B_Type        0x6
#define WALL_A             0x50010030 // ▓  土墙(可破坏)
#define WALL_B             0x60010031 // 〓 铁墙
#define WALL_C             0x70000032 // ≈  河流(减速)
#define WALL_D             0x80000033 // ≡  丛林(隐身)


#define GOODS_STYLE_A      0x90010040 // ☆  五星-空心
#define GOODS_STYLE_B      0xA0010041 // ★  五星-实心


#define BULLET             0xF
#define BULLET_A           0xF0050042 // ¤  榴弹
#define BULLET_B           0xF0050043 // ☉  炮弹
#define BULLET_C           0xF0050044 // ⊕ 穿甲弹
#define BULLET_D           0xF0050045 // ⊙ 贫轴弹
#define BULLET_E           0xF0050046 // ◎  坦克杀手子母弹


#define NULL_A             0x00000047 // □  普通空白
#define NULL_COL           0x00010047 // □  带碰撞体积的空白




#define COLLIDE_1          0x00001000
#define COLLIDE_2          0x00002000




#define UP    0
#define DOWN  1
#define LEFT  2
#define RIGHT 3




//extern WCHAR g_PlayerTankStyle[4][3][4];
extern int   g_nMapData[40][40];


#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) 


#define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1) 



我能力有限,只能用到其中一部分。其余部分真没法使用。


Data.cpp 地图数据部分

每个cpp需要包含

#include "stdafx.h"这个头文件。

#include "stdafx.h"
#include "Data.h"
Object stcBulletArry[200] = {0};
int g_nMapData[40][40] = {
	WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, \
	WALL_B, 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, WALL_B, \
	WALL_B, 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, WALL_B, \
	WALL_B, 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, WALL_B, \
	WALL_B, 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, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, 0, 0, 0, 0, 0, 0, WALL_C, WALL_C, WALL_C, 0, 0, 0, 0, 0, 0, WALL_B, \
	WALL_B, 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, WALL_C, WALL_C, WALL_C, 0, 0, 0, 0, 0, 0, WALL_B, \
	WALL_B, 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, WALL_C, WALL_C, WALL_C, 0, 0, 0, 0, 0, 0, WALL_B, \
	WALL_B, 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, WALL_C, WALL_C, WALL_C, 0, 0, 0, 0, 0, 0, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_B, \
	WALL_B, WALL_A, WALL_A, WALL_A, WALL_A, WALL_D, WALL_D, WALL_D, WALL_A, WALL_A, WALL_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, WALL_B, \
	WALL_B, WALL_A, WALL_A, WALL_A, WALL_A, WALL_D, WALL_D, WALL_D, WALL_A, WALL_A, WALL_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, WALL_B, \
	WALL_B, WALL_A, WALL_A, WALL_A, WALL_A, WALL_D, WALL_D, WALL_D, WALL_A, WALL_A, WALL_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, WALL_B, \
	WALL_B, WALL_A, WALL_A, WALL_A, WALL_A, WALL_D, WALL_D, WALL_D, WALL_A, WALL_A, WALL_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, WALL_B, \
	WALL_B, WALL_A, WALL_A, WALL_A, WALL_A, WALL_D, WALL_D, WALL_D, WALL_A, WALL_A, WALL_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, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, WALL_B, \
	WALL_B, 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, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_C, WALL_C, WALL_C, WALL_A, WALL_A, WALL_A, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_C, WALL_C, WALL_C, WALL_A, WALL_A, WALL_A, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_C, WALL_C, WALL_C, WALL_A, WALL_A, WALL_A, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, WALL_B, \
	WALL_B, 0, 0, 0, 0, WALL_A, WALL_A, WALL_A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, WALL_B, \
	WALL_B, 0, 0, 0, 0, WALL_A, WALL_A, WALL_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, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, WALL_B, \
	WALL_B, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_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, 0, WALL_B, \
	WALL_B, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_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, 0, WALL_B, \
	WALL_B, 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, WALL_B, \
	WALL_B, 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, WALL_B, \
	WALL_B, 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, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, WALL_A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_B, \
	WALL_B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, 0, 0, 0, 0, 0, 0, WALL_A, WALL_A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, WALL_B, \
	WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B, WALL_B };



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值