当前位置:网站首页>【plang 1.4.5】编写坦克(双人)游戏脚本
【plang 1.4.5】编写坦克(双人)游戏脚本
2022-08-02 03:29:00 【ChivenZhang】
最近,想着做一款双人玩的坦克游戏脚本示例,顺便尝试在plang编程语言上测出一波BUG,结果让人失望,程序正常运行。测试代码如下。
工程目录

Main.ps:程序执行入口
import std::IO;
import std::Type;
import std::OS;
import tank::TankClient;
class Main
{
public static main()
{
OS.system("cls");
client->Client = new TankClient();
client.onInit();
while(true)
{
OS.system("cls");
client.onUpdate();
co_yield null;
}
client.onUninit();
IO.printf("game over!");
}
}
TankClient.ps:坦克游戏场景
package tank;
import std::IO;
import std::Type;
import std::OS;
import std::IOEXT;
public class TankClient : Client
{
public TankClient(){}
public onInit()
{
tank1 = new Tank(0,0);
tank2 = new Tank(40,8);
}
public onUninit(){}
public onUpdate()
{
if(tank1 == null || tank2 == null) return;
// listen tank1's keyboard
{
a->int = IOEXT.key('A');
d->int = IOEXT.key('D');
w->int = IOEXT.key('W');
s->int = IOEXT.key('S');
f->int = IOEXT.key('E');
if(a!=0) tank1.move(-1,0);
if(d!=0) tank1.move(1,0);
if(w!=0) tank1.move(0,-1);
if(s!=0) tank1.move(0,1);
if(f!=0) tank1.shoot(tank2.getx(),tank2.gety());
tank1.update();
}
// listen tank2's keyboard
{
a->int = IOEXT.key('J');
d->int = IOEXT.key('L');
w->int = IOEXT.key('I');
s->int = IOEXT.key('K');
f->int = IOEXT.key('U');
if(a!=0) tank2.move(-1,0);
if(d!=0) tank2.move(1,0);
if(w!=0) tank2.move(0,-1);
if(s!=0) tank2.move(0,1);
if(f!=0) tank2.shoot(tank1.getx(),tank1.gety());
tank2.update();
}
// calculate tanks' life here
// but do nothing right now
}
tank1->Tank;
tank2->Tank;
}
Tank.ps:坦克模拟
package tank;
import gui::GUI;
public class Tank
{
public Tank()
{
bullet = new Bullet();
}
public Tank(x->int, y->int)
{
this.x = x;
this.y = y;
bullet = new Bullet(x, y);
}
public update()
{
GUI.getInstance().draw(x, y, '#');
if(bullet != null) bullet.update();
}
public move(offx->int, offy->int)
{
x += offx;
y += offy;
if(x<0 || x>50) x -= offx;
if(y<0 || y>10) y -= offy;
}
public shoot(x->int, y->int)
{
if(bullet != null) bullet.move(this.x, this.y, x, y);
}
public getx()->int{return x;}
public gety()->int{return y;}
x->int = 0;
y->int = 0;
bullet->Bullet;
}
Bullet.ps:弹药模拟
package tank;
import gui::GUI;
public class Bullet
{
public Bullet(){}
public Bullet(x->int, y->int)
{
this.x = this.cx = x;
this.y = this.cy = y;
}
public update()
{
if(cx<x)++cx;
else if(cx>x)--cx;
else;
if(cy<y)++cy;
else if(cy>y)--cy;
else;
if(cx==x && cy == y);
else GUI.getInstance().draw(cx, cy, '*');
}
public move(cx->int, cy->int, x->int, y->int)
{
if(x<0 || x>50);
else this.x = x;
if(y<0 || y>10);
else this.y = y;
if(cx<0 || cx>50);
else this.cx = cx;
if(cy<0 || cy>10);
else this.cy = cy;
}
x->int = 0;
y->int = 0;
cx->int = 0;
cy->int = 0;
}
运行截图(点击E键,上方坦克向下方发射弹药)

代码仓库链接
Gitee:plang-demo
GitHub:plang-demo (可能无法访问)
边栏推荐
猜你喜欢
随机推荐
机器学习预备知识
电子密码锁_毕设‘指导’
NE5532运放加法器
2020 - AAAI - Image Inpainting论文导读《Learning to Incorporate Structure Knowledge for Image Inpainting》
三相同步发电机的空载短路的simulink仿真
物联网方案
LT9211芯片资料分享
【Arduino 连接DHT11 湿度和温度传感器】
MIPI解决方案 ICN6202:MIPI DSI转LVDS转换芯片
[Spark]-LSH局部敏感哈希
【心率传感器与Arduino连接读取心率数据】
机器学习相关 概率论重点笔记
Spark数据读取和创建
ICN6211:MIPI DSI转RGB视频转换芯片方案介绍 看完涨知识了呢
Transformer结构解析及常见问题
【MQ-2 可燃气体和烟雾传感器与 Arduino 配合使用】
基于树莓派的智能箱包开发环境搭建
案例|工业物联网解决方案·智慧钢厂高性能安全数采
联阳IT6561|IT6561FN方案电路|替代IT6561方案设计DP转HDMI音视频转换器资料
[DS3231 RTC real-time clock module and Arduino interface to build a digital clock]









