当前位置:网站首页>【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 (可能无法访问)
边栏推荐
猜你喜欢
随机推荐
振芯GM7123C:功能RGB转VGA芯片方案简介
Spark MLlib特征处理 之 StringIndexer、IndexToString使用说明以及源码剖析
D类音频功放NS4110B电路设计
【科普贴】SPI接口详解
USB_ID介绍
树莓派入门(1)系统镜像烧录
字符串匹配(蛮力法+KMP)
[Spark]-RDD详解之变量&操作
Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset I3D论文精读
Spark特征工程-one-hot 和 multi-hot
【科普贴】I2C通讯协议详解——偏软件分析和逻辑分析仪实例分析
如何快速搭建属于自己的物联网平台?
Comparative analysis of mobile cloud IoT pre-research and Alibaba Cloud development
目标检测(一):R-CNN系列
MIPI解决方案 ICN6202:MIPI DSI转LVDS转换芯片
Comparative analysis of OneNET Studio and IoT Studio
哈工大2021机器学习期末考试题
移动云物联网预研及阿里云开发对比分析
【NTC 热敏电阻与 Arduino 读取温度】
Case | industrial iot solutions, steel mills high-performance security for wisdom









