主题:[讨论]FC经典『90坦克大战』,感兴趣的快进!!!!!!!!!!!!!!
Seven_L
[专家分:0] 发布于 2008-07-31 23:28:00
好不容易,有十几天假期,这几天一味怀旧,找出了那部“落尘与童年齐飞”的电视游戏机,再战了一番。
于是,一时冲动,决定做一个“90坦克大战”,就这样,昨晚混了两个多小时,把图像处理方面基本完成。
不过,再过两天我就要回校,进入高三,做最后拼搏,所以,这个游戏,我不知道是否能完成。(应该不能)
[color=FF0000][size=3]因此,有谁对这个游戏感兴趣的,想帮忙写完,麻烦一下![/size] [/color][em11]
===================================================================================================
说说我完成的吧:
1,完成80%的图像处理(包括地形,7辆坦克车);
2,坦克基本处理;
3,地图编辑器;
4,3张地图;
5,移动判断;
还未完成的(需要帮忙的):
1,子弹处理;
2,敌机的低等AI(我已经想好思路,如果你需要,我可提供我的思路);
3,细节处理;
===================================================================================================
总的来说,希望我们能合作完成这个游戏。如有兴趣,请回复我。要快,因为我马上要拼命了,呵呵 ^_^
最后,奉上小弟我的半成品。
[img]http://disk.8fls.cn/img.asp?src=l_tank_2_1.JPG[/img]
第一关(第一张地图,第二辆坦克)
[img]http://disk.8fls.cn/img.asp?src=l_tank_1_1.JPG[/img]
第二关(第二张地图,第三辆坦克)
最后更新于:2008-08-16 18:19:00
回复列表 (共11个回复)
沙发
Seven_L [专家分:0] 发布于 2008-07-31 23:30:00
补充代码:
uses crt,graph,l_draw,key;
const
max=44;
x=150;
y=80;
up=1;
down=2;
left=3;
right=4;
type
l_img=array[1..max,1..max]of 0..256;
l_tank=record
x,x0:word;
y,y0:word;
diretion:integer;
img:string;
v:integer;
end;
var
p1_x,p1_y:word;
tank:array[1..8]of l_tank;
position:l_img;
v:integer;
procedure print_map(mapname:string);
var
st:string;
mapfile:file;
numread:word;
i,j:integer;
recordxy:array [1..2] of integer;
begin
st:=concat('map/',mapname,'.map');
assign(mapfile,st);
reset(mapfile,1);
blockread(mapfile,recordxy,sizeof(recordxy),numread);
blockread(mapfile,position,sizeof(tempimg),numread);
close(mapfile);
for i := 1 to recordxy[1] do
for j := 1 to recordxy[2] do
if position[j,i]<>255 then
begin
case position[j,i] of
7 : printimg('bing',x+10*i,y+10*j);
11 : printimg('hai',x+10*i,y+10*j);
12 : begin
if (j+i) mod 2 = 0 then
begin
printimg('zhuan1',x+5*i*2,y+5*j*2);
printimg('zhuan1',x+5*(i*2+1),y+5*(j*2+1));
printimg('zhuan2',x+5*(i*2),y+5*(j*2+1));
printimg('zhuan2',x+5*(i*2+1),y+5*(j*2));
end;
if (j+i) mod 2 = 1 then
begin
printimg('zhuan1',x+5*i*2,y+5*j*2);
printimg('zhuan1',x+5*(i*2+1),y+5*(j*2+1));
printimg('zhuan2',x+5*(i*2),y+5*(j*2+1));
printimg('zhuan2',x+5*(i*2+1),y+5*(j*2));
end;
end;
10 : printimg('cao',x+10*i,y+10*j);
15 : printimg('tie',x+10*i,y+10*j);
end;
end;
printimg('dalao',x+10*13,y+10*25+2);
end;
procedure initgame;
begin
setfillstyle(1,11);
bar(x-10,y-10,x+10,y+290);
bar(x-10,y-10,x+290,y+10);
bar(x+270,y,x+290,y+290);
bar(x,y+270,x+270,y+290);
print_map('map_1');
tank[1].x:=9;
tank[1].y:=25;
tank[1].x0:=9;
tank[1].y0:=25;
v:=14;
tank[1].img:='player12'; {PLAYER1}
printimg(tank[1].img,x+10*tank[1].x,y+10*tank[1].y);
end;
procedure wait;
begin
repeat until KeyPressed2;
end;
板凳
Seven_L [专家分:0] 发布于 2008-07-31 23:30:00
procedure checktank;
var
i,j:integer;
begin
for i:=1 to 8 do
if (tank[i].x0<>tank[i].x)or(tank[i].y0<>tank[i].y) then
begin
l_cleanimg(tank[i].img,x+10*tank[i].x0,y+10*tank[i].y0);
case tank[i].diretion of
up : for j:=1 to 10 do
begin
printimg(tank[i].img,x+10*tank[i].x0,y+10*tank[i].y0-j);
delay(v);
l_cleanimg(tank[i].img,x+10*tank[i].x0,y+10*tank[i].y0-j);
end;
down : for j:=1 to 10 do
begin
printimg(tank[i].img,x+10*tank[i].x0,y+10*tank[i].y0+j);
delay(v);
l_cleanimg(tank[i].img,x+10*tank[i].x0,y+10*tank[i].y0+j);
end;
left : for j:=1 to 10 do
begin
printimg(tank[i].img,x+10*tank[i].x0-j,y+10*tank[i].y0);
delay(v);
l_cleanimg(tank[i].img,x+10*tank[i].x0-j,y+10*tank[i].y0);
end;
right : for j:=1 to 10 do
begin
printimg(tank[i].img,x+10*tank[i].x0+j,y+10*tank[i].y0);
delay(v);
l_cleanimg(tank[i].img,x+10*tank[i].x0+j,y+10*tank[i].y0);
end;
end;
printimg(tank[i].img,x+10*tank[i].x,y+10*tank[i].y);
tank[i].x0:=tank[i].x;
tank[i].y0:=tank[i].y;
end;
end;
procedure control;
var
keychar:char;
begin
if keypressed2 then
begin
keychar:=ReadChar;
ClearKeyboardBuf;
case upcase(keychar) of
'W' : begin dec(tank[1].y);tank[1].diretion:=up;end;
'S' : begin inc(tank[1].y);tank[1].diretion:=down;end;
'A' : begin dec(tank[1].x);tank[1].diretion:=left;end;
'D' : begin inc(tank[1].x);tank[1].diretion:=right;end;
end;
end;
end;
begin
initgraph_16;
Set_Handler;
WaitForACSReleased;
initgame;
while not KeyMap[sEsc] do
begin
control;
checktank;
end;
end.
3 楼
游侠UFO [专家分:1200] 发布于 2008-08-03 12:51:00
不错啊!!期待完成。。
如果能使用双缓冲绘图技术。。。屏幕坦克闪烁问题应该很好解决!
然后就是绘图貌似比较慢。。不知道能否改进!
4 楼
Seven_L [专家分:0] 发布于 2008-08-03 16:43:00
我试过用“切换页面”的动画原理做(不知道算不算是“双缓冲绘图技术”),在闪烁和绘图的问题上是可以得到很好的处理,但,不知道问什么,切换页面时图片总会有上下微量偏移。请问你知道是问什么吗?或者,你能教教我怎么使用“双缓冲绘图技术”吗?谢谢!
5 楼
小田甜 [专家分:3910] 发布于 2008-08-05 12:57:00
1. 内存溢出.
2. 可以尝试:
SetRGBPalette (procedure) (Graph unit)
----------------------------------------------
Modifies palette entries for the IBM 8514 and VGA drivers.
Declaration:
procedure SetRGBPalette(ColorNum, RedValue, GreenValue, BlueValue:
Integer);
Target:
Real, Protected
在FC模拟器的查看器里面可以找到对应的颜色RGB的值.
高度仿真!
6 楼
游侠UFO [专家分:1200] 发布于 2008-08-06 10:42:00
[quote]
我试过用“切换页面”的动画原理做(不知道算不算是“双缓冲绘图技术”),在闪烁和绘图的问题上是可以得到很好的处理,但,不知道问什么,切换页面时图片总会有上下微量偏移。请问你知道是问什么吗?或者,你能教教我怎么使用“双缓冲绘图技术”吗?谢谢![/quote]
切换页面?感觉应该是。。反正就是先在看不到的地方吧图形画好(比如内存),然后再整体搬上显存显示。。。
7 楼
莫名的失落 [专家分:0] 发布于 2008-08-20 23:55:00
强悍``
8 楼
hideer [专家分:0] 发布于 2009-03-09 11:48:00
是用什么语言写的
9 楼
angwuy [专家分:2280] 发布于 2009-03-11 22:10:00
...
明显是pascal
10 楼
tr0217 [专家分:730] 发布于 2009-06-10 20:33:00
不是内存溢出,楼主的程序工作在实模式下
要用dosbox之类的东西中转一下才能运行在windows上。
我想请问一下,那个svga的图形驱动文件是否与具体的语言无关,
我最先学的是turbo c跟你那个pascal差不多dos时代dos下的东西,
我想收藏一下,你能不能把svga图形驱动的借口文件发给我
我来回复