#include<Windows.h>
#include <stdio.h>
#include<stdlib.h>
#include <conio.h>
#include <time.h>
#define USERTANKMAP 1
#define ENETANKMAP 2
#define USERTANK "■"
#define TANK_DIR_UP 0
#define TANK_DIR_DW 2
#define TANK_DIR_LF 1
#define TANK_DIR_RH 3
//用户坦克
typedef struct USER //速度为3
{
int x;
int y;
int life; //默认为50
int aggressivity; //默认为25
int dir;
}user, *Puser;
//全局的用户坦克
user myuser;
//字符打印
void PrintChar(int Wide, int High, char*pszChar, WORD wAttr) {
//1.设置光标属性
CONSOLE_CURSOR_INFO cci;
cci.dwSize = 1;
cci.bVisible = FALSE;
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorInfo(hOut, &cci);
//2.修改光标在控制台中的坐标位置
COORD loc;
loc.X = Wide * 2;
loc.Y = High;
//3.设置光标在控制台中的坐标位置
SetConsoleCursorPosition(hOut, loc);
// 设置打印符号的前景色背景色
SetConsoleTextAttribute(hOut, wAttr);
// 输出你想输出的
printf("%s", pszChar);
}
void tankchar(int Wide, int High, char*pszChar, WORD wAttr) {
switch (myuser.dir)
{
case TANK_DIR_LF:
PrintChar(myuser.x, myuser.y, USERTANK, wAttr);
///////////////////////////////////////////////////////////
PrintChar(myuser.x, myuser.y - 1, USERTANK, wAttr);
PrintChar(myuser.x - 1, myuser.y, USERTANK, wAttr);
PrintChar(myuser.x, myuser.y + 1, USERTANK, wAttr);
PrintChar(myuser.x + 1, myuser.y - 1, USERTANK, wAttr);
PrintChar(myuser.x + 1, myuser.y + 1, USERTANK, wAttr);
break;
case TANK_DIR_RH:
PrintChar(myuser.x, myuser.y, USERTANK, wAttr);
///////////////////////////////////////////////////////////
PrintChar(myuser.x + 1, myuser.y, USERTANK, wAttr);
PrintChar(myuser.x, myuser.y - 1, USERTANK, wAttr);
PrintChar(myuser.x, myuser.y + 1, USERTANK, wAttr);
PrintChar(myuser.x - 1, myuser.y - 1, USERTANK, wAttr);
PrintChar(myuser.x - 1, myuser.y + 1, USERTANK, wAttr);
break;
case TANK_DIR_UP:
PrintChar(myuser.x, myuser.y, USERTANK, wAttr);
//////////////////////////////////////////////////////////
PrintChar(myuser.x + 1, myuser.y - 1, USERTANK, wAttr);
PrintChar(myuser.x, myuser.y - 1, USERTANK, wAttr);
PrintChar(myuser.x + 2, myuser.y, USERTANK, wAttr);
PrintChar(myuser.x + 2, myuser.y - 1, USERTANK, wAttr);
PrintChar(myuser.x + 1, myuser.y - 2, USERTANK, wAttr);
break;
case TANK_DIR_DW:
PrintChar(myuser.x, myuser.y, USERTANK, wAttr);
///////////////////////////////////////////////////////////
PrintChar(myuser.x - 1, myuser.y, USERTANK, wAttr);
PrintChar(myuser.x - 1, myuser.y - 1, USERTANK, wAttr);
PrintChar(myuser.x, myuser.y + 1, USERTANK, wAttr);
PrintChar(myuser.x + 1, myuser.y, USERTANK, wAttr);
PrintChar(myuser.x + 1, myuser.y - 1, USERTANK, wAttr);
break;
default:
break;
}
}
void TankMove(int m_nDir)
{
if (myuser.x > 3 || myuser.x<37 || myuser.y >3 || myuser.y<37)
{
PrintChar(myuser.x + 1, myuser.y, " ", 0x00);
system("cls");
switch (m_nDir) {
case TANK_DIR_UP:
myuser.y--;
break;
case TANK_DIR_DW:
myuser.y++;
break;
case TANK_DIR_LF:
myuser.x--;
break;
case TANK_DIR_RH:
myuser.x++;
break;
}
tankchar(myuser.x, myuser.y, USERTANK, 0x44);
}
}
bool ChangeDir(char cDir) {
int nNewDir = -1;
switch (cDir) {
case 'W':
case 'w':
nNewDir = TANK_DIR_UP;
break;
case 's':
case 'S':
nNewDir = TANK_DIR_DW;
break;
case 'a':
case 'A':
nNewDir = TANK_DIR_LF;
break;
case 'd':
case 'D':
nNewDir = TANK_DIR_RH;
break;
case 'q':
case 'Q':
exit(0);
break;
case 'e':
case 'E':
_getch();
break;
default:
break;
}
myuser.dir = nNewDir;
TankMove(nNewDir);
return true;
}
void main()
{
//////////////////模拟按下shit键////////////////
keybd_event(VK_SHIFT, 0, 0, 0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
myuser.x = 20;
myuser.y = 20;
myuser.dir = TANK_DIR_DW;
PrintChar(myuser.x, myuser.y, USERTANK, 0x55);
char ch = _getch();
if (ch == 'w' || ch == 'W' || ch == 'a' || ch == 'A' || ch == 's' || ch == 'S' || ch == 'd' || ch == 'D') {
// 设置坦克的移动时间间隔
clock_t tBegin = clock(), tEnd = 0;
while (true) {
if (_kbhit())
{
char ch = _getch();
ChangeDir(ch);
}
tEnd = clock();
if (tEnd - tBegin > 200)
{
tBegin = tEnd;
TankMove(myuser.dir);
}
}
}
}
c实现坦克移动
原创
©著作权归作者所有:来自51CTO博客作者土匪猿的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:c++写 2048
下一篇:c语言简单版坦克大战
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
坦克大战_坦克移动
坦克大战_坦克移动
java 游戏 ide 构造函数 -
坦克大战_敌方坦克移动并发子弹
坦克大战迭代开发第三版
java 游戏 i++ ide -
坦克大战-C语言-详注版
个属于自己的游戏.游戏体...
坦克大战 C语言 初始化 双缓冲 -
坦克大战_坦克绘制
java小项目 坦克大战 坦克绘制
java 游戏 构造函数 父类 -
【Kotlin】坦克大战3:移动和碰撞检测
移动
kotlin ide sed 碰撞检测 -
【致敬童年】Funcode实现坦克大战
【致我逝去的童年】无数次想起小时候下午,几个人堆坐在小霸王游戏机前打游戏的场景。致敬童年,用Funcode实现坦克大战
c++ 游戏 #include get方法 #define