期末实验截止日期将近,奈何还是啥也不会。这次实验选择在gamebunio上制作自己DIY一个小游戏。可是对于ardunio实在不熟悉,万般无奈只好选择官网上2048的小游戏进行代码分析,来了解大致结构,以备后期画瓢。
void setup() {
gb.begin(); //初始化Gamebuino。应该在setup()函数的开头调用一次.然后调用gb.titleScreen() and gb.pickRandomSeed().
gb.titleScreen(F("JWinslow23 presents"), Title2048);//显示标题屏幕。应该在启动时出现的gb.begin()函数之后调用。当用户按下“C”键离开游戏时,您还应该允许用户返回标题屏幕
gb.display.persistence = true; //不清除每一帧之间的显示;
ResetDisplay(); //复位显示
gb.battery.show = false; //电池状态显示
gb.pickRandomSeed();
if(isValidGame()) {
restoreGame();
gb.popup(F("Back already?"),40);
} else {
newSave(false);
gb.popup(F("Welcome to 2048!"),40); //弹出文本2s
}
}
初始化Gamebuino。应该在setup()函数的开头调用一次,然后调用gb.titleScreen()和gb.pickRandomSeed()。
gb.begin();
显示标题屏幕。应该在启动时出现的gb.begin()函数之后调用。当用户按下“C”键离开游戏时,您还应该允许用户返回标题屏幕,因为标题屏幕允许您在游戏之间切换。
在标题界面,你可以做以下事情:
gb.titleScreen(F("name"), logo);
F("name")(可选):将“name”替换为游戏名(但保留“”)。将显示在“开始”菜单中。
logo(可选):游戏的logo。任何大小,从8*8px到64*30px,或者,如果没有指定名称,到64*36px
混合使用电池电压,环境光传感器和自启动以来经过的时间来随机选择seed。 它应放在gb.begin()和gb.titleScreen()之后,这样随机seed将取决于用户按下“ A”离开标题屏幕所花费的时间。
gb.pickRandomSeed();
选择是否自动清除屏幕之间的每一帧
gb.display.persistence = true;
接下来看一看ResetDisplay();
void ResetDisplay() {
gb.display.clear();
gb.display.drawBitmap(56,0,Logo2048);
gb.display.drawRect(53,7,31,13);
gb.display.drawRect(53,21,31,13);
gb.display.cursorX = 55;
gb.display.cursorY = 9;
gb.display.print(gameState.score);
gb.display.cursorX = 55;
gb.display.cursorY = 23;
gb.display.print(gameState.highscore);
gb.display.setFont(font3x3);
gb.display.cursorX = 55;
gb.display.cursorY = 15;
gb.display.print(F("POINTS"));
gb.display.cursorX = 55;
gb.display.cursorY = 29;
gb.display.print(F("HIGH"));
gb.display.setFont(font3x5);
gb.display.cursorX = 53;
gb.display.cursorY = 35;
gb.display.print(F("\25:save"));
gb.display.cursorX = 53;
gb.display.cursorY = 42;
gb.display.print(F("\26:reset"));
}
效果图(右侧部分)
清除显示缓冲区(清除所有内容)并将文本光标设置回0,0(左上角)。如果您需要在每一帧清除显示,请设置 gb.display.persistence=ture
(与手动相比,它将提供更好的图像稳定性)。
gb.display.clear();
用于在屏幕上显示作为字节数组的位图
gb.display.drawBitmap(x,y,bitmap,rotation,flip);
在指定位置绘制矩形。使用的颜色是使用gb.display.setColor()定义的。如果指定的值导致矩形的某些部分离开屏幕,则不会呈现它们。
gb.display.drawRect(x, y, w, h);
设置光标的X位置。用于设置gb.display.print的位置。打印和gb.display.println。使用0到83之间的值可以查看文本(或文本的一部分)。设置光标的Y位置。用于设置gb.display.print的位置。打印和gb.display.println。使用0到47之间的值可以查看文本(或文本的一部分)。(因为是用Nokia5110屏幕分辨率为84*48)
gb.display.cursorX = x;
gb.display.cursorY = y;
将数据作为可读的ASCII文本打印到屏幕上。这个命令可以有多种形式。数字使用ASCII字符打印每个数字。浮点数以类似的方式打印为ASCII数字,默认为两位小数。字节作为单个字符发送。字符和字符串按原样发送。
Serial.print(78)
gives "78"Serial.print(1.23456)
gives "1.23"Serial.print('N')
gives "N"Serial.print("Hello world.")
gives "Hello world."可选的第二个参数指定要使用的基本(格式);允许的值是BIN(二进制)、OCT(八进制)、DEC(十进制)、HEX(十六进制)。对于浮点数,此参数指定要使用的小数位数。
Serial.print(78, BIN)
gives "1001110"Serial.print(78, OCT)
gives "116"Serial.print(78, DEC)
gives "78"Serial.print(78, HEX)
gives "4E"Serial.println(1.23456, 0)
gives "1"Serial.println(1.23456, 2)
gives "1.23"为了节省RAM,建议将基于闪存的字符串传递给Serial.print(),方法是用F()封装它们。
用于设置要打印的位置以使用gb.display.cursorX 和gb.display.cursorY。在打印文本/数字之后,光标将位于所打印内容的末尾。
您可以gb.display.setFont更改字体。可以使用gb.display.fontSize更改文本的大小。
更改在gb.display.print和gb.display.drawChar中使用的字体,可以是一种默认字体,也可以是一种自定义字体。创建你自己的工具在GitHub上。要使用一种默认字体,不要忘记添加extern const byte font3x3[],在程序的开头
gb.display.setFont(font);
字体:自己想要的字体
选择在屏幕右上角显示或不显示电池电量指示。注意,电池电量指示将设置为每次 gb.titleScreen is calls
gb.battery.show = true;
在给定的持续时间内,在屏幕底部显示弹出消息。
gb.popup(F("Text"), duration);
告一段落,明天继续来loop