算是散分吧决定了,先学习。。不纠结于我的坦克大战。。原名打飞机!

aimsam 2010-03-30 11:05:40
学C只学了一点点就莽莽撞撞想做一个小游戏出来,顺便当课设。。就是原来我想做的打飞机后面吧飞机改成了坦克。。

然后一直用着VC不想用TC来做,感觉TC就算学了他的图形函数也没什么意思。
所以随便查了点资料就开始了用纯的字符来表示坦克什么的。。前前后后整了有好多个小时,时间跨度有3 4天。。。

不过还是学到蛮多,我知道了VC下的那个黑色窗口叫控制台不叫DOS。然后也知道了DOS和控制台是不支持多线程的。

也问到几种解决办法,但是用起来还是非常非常的烦琐,目前只实现了坦克在地图里上下左右移动,代码就已经差不多200行了(从来没写过这么长的)。。感觉继续做下去会浪费我很多时间,这些时间打乱了我原来的学习计划。所以决定暂时终止做这个小程序,然后我写的代码发出来。。以后看有没有机会补充完成。

感谢CSDN的大虾们给我的以前现在以及以后的回帖!

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define My 24
#define Nx 30

void Ini(int (*map)[Nx])
{
int i, j;

for (i = 0; i < My; i++)
{
for (j = 0; j < Nx - 1; j++)
map[i][j] = 0;
map[i][Nx - 1] = -1;
}
for (i = 0; i < Nx - 2; i++)
{
map[0][i] = 21;
map[My - 1][i] = 21;
}
for (i = 0; i < My - 1; i++)
{
map[i][0] = 23;
map[i][Nx - 2] = 23;
}

map[0][0] = 20;
map[0][Nx - 2] = 22;
map[My - 1][0] = 24;
map[My - 1][Nx - 2] = 25;
}

void Print(int map[My][Nx])
{
int i, j;

for(i = 0; i < My; i++)
{
for(j = 0; j < Nx; j++)
{
switch(map[i][j])
{
case 0:
printf(" "); //数字0
break;
case 1:
printf("█"); //数字1
break;
case 2:
printf("◎");//数字2 = 子弹
break;
case 20:
printf("╔"); //数字20
break;
case 21:
printf("═"); //数字21
break;
case 22:
printf("╗"); //数字22
break;
case 23:
printf("║"); //数字23
break;
case 24:
printf("╚"); //数字24
break;
case 25:
printf("╝"); //数字25
break;
case -1:
printf("\n"); //数字-1
break;
}
}

}
}

void Wmove(int (*map)[Nx], int xiaot[2][3], int x, int y)
{
int i, j;

for (i = 0; i < 2; i++)
for (j = 0; j < 3; j++)
map[y + i - 1][x + j - 1] = xiaot[i][j];
}

void Dmove(int (*map)[Nx], int xiaot[3][2], int x, int y)
{
int i, j;

for (i = 0; i < 3; i++)
for (j = 0; j < 2; j++)
map[y + i - 1][x + j] = xiaot[i][j];
}


void Amove(int (*map)[Nx], int xiaot[3][2], int x, int y)
{
int i, j;

for (i = 0; i < 3; i++)
for (j = 0; j < 2; j++)
map[y - 1 + i][x - 1 + j] = xiaot[i][1 - j];
}

void Smove(int (*map)[Nx], int xiaot[2][3], int x, int y)
{
int i, j;

for (i = 0; i < 2; i++)
for (j = 0; j < 3; j++)
map[y + i - 1][x + j - 1] = xiaot[1 - i][j];
}

/*
void Zidan(int (*map)[Nx], int *x, int *y,int flag)
{
int zidan = 2;

switch (flag)
{
case 1:
*y++;
break;

}


map[*y][*x] = zidan;

}*/


void Move(int (*map)[Nx],int *x,int *y,int *flag,int key)
{

int lxiaot[3][2] = {1,0,1,1,1,0}, xiaot[2][3] = {0,1,0,1,1,1};

switch (key)
{
case 72:
{
if (*flag == 1)
{
if (*y > 2)
(*y)--;
Wmove(map, xiaot, *x, *y);
}
else
{Wmove(map, xiaot, *x, *y);*flag = 1;}
break;
}
case 77:
{
if (*flag == 2)
{
if (*x < Nx - 4)
(*x)++;
Dmove(map, lxiaot, *x, *y);
}
else
{Dmove(map, lxiaot, *x, *y);*flag = 2;}
break;
}
case 75:
{
if (*flag == 3)
{
if (*x > 2)
(*x)--;
Amove(map, lxiaot, *x, *y);
}
else
{Amove(map, lxiaot, *x, *y);*flag = 3;}
break;
}
case 80:
{
if (*flag == 4)
{
if (*y < My - 3)
(*y)++;
Smove(map, xiaot, *x, *y);
}
else
{Smove(map, xiaot, *x, *y);*flag = 4;}
break;
}
}
}

void begin()
{

int map[My][Nx], x = 2, y = My - 3;
int key = 0, flag = 1;

Ini(map);
Print(map);

while(key != 27)
{
key = getch();
system("CLS");
Ini(map);
Move(map,&x,&y,&flag,key);
Print(map);

}
}

int main()
{



begin();

return 0;
}
...全文
241 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
aimsam 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 freezezdj 的回复:]
不错,估计我现在也做不出来。
崇拜一个!

怎么玩呀?
[/Quote]


没做出来啦。。。发个帖留做纪念我想做得第一个有功能的程序而不是书上的题目。

我先结贴了不管怎么说谢谢大家支持了,对新手有很大的鼓励!
aimsam 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 zhao4zhong1 的回复:]
做事有始有终是一个人的基本素质之一。
[/Quote]

嗯,坦克大战我肯定会完成的。但是用这个思路实在有难度。等再过一个月这样,我把手上的事弄完,再学下多线程才会比较容易
traceless 2010-03-31
  • 打赏
  • 举报
回复
哈哈 lz的函数和变量命名有点意思哈。。 (Ini,人家初始化更多的是Init或者是InitXXX),lz独特呀,不要那个t

。。。

才入门就有这个冲劲和行动,不错, lz 加油!
traceless 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 dubiousway 的回复:]

呵呵,运行了一下,还不错啦。
学语言莫过于运用。

至于你说不想用TC来做,感觉TC就算学了他的图形函数也没什么意思

想起我门大学的时候,当年可是在tc 上投入了满多的。甚至自作程序的下拉菜单,我们都是在tc图形模式下,一条灰线一条白线的描出立体感来的。回想一下,还是记忆满多的。

啊,大学,青春~,哦ohohohoho.

^-^
[/Quote]

是啊 光阴荏苒,岁月如梭啊。。。。

我们的青春像小鸟一样一去不复返了。。
XLL19880206 2010-03-31
  • 打赏
  • 举报
回复
顶楼主。
delphiwcdj 2010-03-31
  • 打赏
  • 举报
回复
学习下
风子II 2010-03-31
  • 打赏
  • 举报
回复
jf!
cai_guoduo 2010-03-31
  • 打赏
  • 举报
回复
活到老,学到老或
某某9 2010-03-31
  • 打赏
  • 举报
回复
楼主很牛逼!
赵4老师 2010-03-31
  • 打赏
  • 举报
回复
做事有始有终是一个人的基本素质之一。
CreasyChan 2010-03-31
  • 打赏
  • 举报
回复
加油!!!!!!!
ljm1212 2010-03-31
  • 打赏
  • 举报
回复
坚持。。。。jf
happynxy 2010-03-31
  • 打赏
  • 举报
回复
坚持把它做完,你会获得更多的代码经验,这些经验是在书本上学不到的:)
ameyume 2010-03-31
  • 打赏
  • 举报
回复
支持,磨刀不误砍柴工
menglei0208 2010-03-31
  • 打赏
  • 举报
回复
bu cuo a gemei
wangxing221 2010-03-31
  • 打赏
  • 举报
回复
"DOS和控制台是不支持多线程的",控制台支持,我试过的
昵称很不好取 2010-03-31
  • 打赏
  • 举报
回复
nice~~
acdbxzyw 2010-03-31
  • 打赏
  • 举报
回复
好。。。
sk19891117 2010-03-31
  • 打赏
  • 举报
回复
哇~ 打飞机喔~    继续加油 再把坦克变成飞机吧~
冻结 2010-03-31
  • 打赏
  • 举报
回复
不错,估计我现在也做不出来。
崇拜一个!

怎么玩呀?
加载更多回复(19)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧