C語言寫坦克大戰筆記(二)

2021-06-26 16:52:55 字數 4957 閱讀 3740

老師在給出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 //創造子彈的結構體

object, *pobject;

extern object stcbulletarry[200];

typedef struct _ctank //創造坦克的結構體

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] = ;

int g_nmapdata[40][40] = ;

C 遊戲《坦克大戰》 坦克

這裡的各種型別,使用struct而不是enum,避免後面強制轉換。子彈資訊 public struct t bulletinfo 坦克型別 public struct t type 坦克行動方向 public struct t dir 公共引數 public struct t commpar 設計框...

經典坦克大戰再現(二)

不好意思我承認我鴿了一天,這一切都是因為我這不爭氣的眼鏡,它該換眼鏡了。昨天調了快一下午的 就是因為獲取的時候路徑裡面少敲了個s導致自己沒查出來光在邏輯 裡面找錯誤,鑽進了牛角尖就再沒出來 看著這紅色的報錯,我心態崩了啊 就當我想要重寫時,突然意識看到左側的專案欄就想到路徑是不是對的,這一查都人都傻...

C 坦克大戰學習總結

新增資源在properties下的resource.resx新增資源 使用資源 工程名.properties.resource.資源名 實際本質,是乙個流。soundplayer ex 命名空間 system.media 賦值 1.ex.stream,用resource資源 2.ex.soundlo...