【plang 1.4.4】编写贪吃蛇脚本

最近打算用plang编程语言编写一些小游戏demo,顺便测测语言工具的健壮性。贪吃蛇是小时候喜欢玩的,就决定是它了。

先设计Snake类:

package snake;

import gui::GUI;
import std::collection::ArrayList;

public class Snake : GameObject
{
	public Snake()
	{
		super();
		i->int = 0;
		while(i < s.length)
		{
			s[i][0] = i;
			s[i][1] = 0;
			++i;
		}
	}
	// 绘制
	public update()
	{
		i->int = 0;
		while(i<s.length)
		{
			gui.draw(s[i][0], s[i][1], '6');
			++i;
		}
	}
	// 更新位置
	public update(x->int, y->int)->boolean
	{
		i->int=0;
		while(i+2<s.length)
		{
			if(x == s[i][0] && y == s[i][1])
			{
				return false;
			}
			++i;
		}
		if(x == s[s.length-2][0] && y == s[s.length-2][1])
		{
			return true;
		}
		i=0;
		while(i+1<s.length)
		{
			s[i][0] = s[i+1][0];
			s[i][1] = s[i+1][1];
			++i;
		}
		s[s.length-1][0] = x;
		s[s.length-1][1] = y;
		return true;
	}
	
	public getX()->int
	{
		return s[s.length-1][0];
	}
	
	public getY()->int
	{
		return s[s.length-1][1];
	}
	
	s->int[][] = new int[10][2];
}

食物类:

package snake;


public class Food : GameObject
{
	public Food()
	{
		super();
	}
	// 绘制
	public update()
	{
		gui.draw(x, y, '@');
	}
	// 更新位置
	public update(x->int, y->int)->boolean
	{
		if(x==this.x && y==this.y)
		{
			return true;
		}
		this.x = x;
		this.y = y;
		return true;
	}
	
	public getX()->int {return x;}
	
	public getY()->int {return y;}
	
	protected x->int = 0;
	protected y->int = 0;
	
}

再写一个场景类测试一下,这条代码蛇是否能动!

import std::IO;
import std::Type;
import std::OS;
import std::TIME;
import std::IOEXT;

import snake::Snake;
import snake::Food;

class Main
{
	public static main()
	{
		OS.system("cls");
		OS.srand(TIME.time());
		
		snake->Snake = new Snake();
		food->Food = new Food();
		
		L->int = 0;
		R->int = 50;
		
		T->int = 0;
		B->int = 20;
		
		food.update((L+R)/2, (T+B)/2);
		
		times->int = 0;
		offX->int = 0;
		offY->int = 0;
		
		while(true)
		{
			OS.system("cls");

			a->int = IOEXT.key('A');
			d->int = IOEXT.key('D');
			w->int = IOEXT.key('W');
			s->int = IOEXT.key('S');

			if(a != 0 && d != 0)
			{
				offX = 0;
			}
			else if(a != 0)
			{
				offX = -1;
			}
			else if(d != 0)
			{
				offX = 1;
			}
			else
			{
				offX = 0;
			}

			if(w != 0 && s != 0)
			{
				offY = 0;
			}
			else if(w != 0)
			{
				offY = -1;
			}
			else if(s != 0)
			{
				offY = 1;
			}
			else
			{
				offY = 0;
			}
			
			if(offX != 0 || offY != 0)
			{
				x->int = snake.getX() + offX;
				y->int = snake.getY() + offY;
				
				if(L <= x && x<= R && T <= y && y <= B)
				{
					if(snake.update(x, y) == false)
					{
						break;
					}
					if(snake.getX() == food.getX() && snake.getY() == food.getY())
					{
						food.update(OS.rand() % (L+R), OS.rand() % (T+B));
					}
				}
			}
			food.update();
			snake.update();
			co_yield null;
		}
		
		IO.printf("game over!");
		
	}
}

整个demo是在命令行环境下运行的,实在过于简陋,但本着测试的初衷,勉强给个及格。

运行截图:【命令行高频更新,出现闪烁现象】

源代码仓库:https://github.com/chivenzhang/plang-demo

自研产品介绍:Plang高级编程语言

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChivenZhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值