常見的遊戲開發有c/c++(unreal), c#(unity)等, pascal語言的也有(但是和前者對比不夠流行。
關於pascal的優勢,網上都說時易於教學,可以培養良好的程式習慣云云,我只是聽之而已。
如果說最後需要c++,為什麼一開始就面對呢,非要用pascal繞一圈,得不償失的。
以上僅是個人觀點
在pascal基礎系列文章第一篇我曾寫到閒的無聊,學習一下pascal
, 目前也是如此。
如果為了學習遊戲開發,快速上手自然要用unreal或者unity。 從基礎做起,估計要學習圖形學之類的知識。
但是我是閒情偶記(記錄的記)
本系列關注於2d code,不關注遊戲性(關卡設計等)以及遊戲相關資源(字型,美術,**音效等)的建立
pascal是跨平台的,如果要寫的程式也要跨平台,可能需要使用opengl(相比vulkan可以支援更多的舊裝置)好一些。
但是為了偷懶,決定使用sdl2。優點如下
sudo apt install libsdl2-dev libsdl2-gfx-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-net-dev libsdl2-ttf-dev
sudo apt install lazarus make
開始之前需要了解遊戲的大體的執行機制
部分平台的markdown不支援flowchart…
這就是遊戲的基本框架,看起來很簡單.
建立乙個視窗,5秒後會自動關閉
program test01;
uses sysutils,sdl2;
var
pw : psdl_window;
pr : psdl_renderer;
begin
// init
sdl_init(sdl_init_video);
if sdl_wasinit(sdl_init_video)<>0 then writeln('video init');
pw := sdl_createwindow('hello',sdl_windowpos_centered,sdl_windowpos_centered,800,450,
sdl_window_shown);
pr := sdl_createrenderer(pw,-1,0);
// render
sdl_setrenderdrawcolor(pr,0,0,0,255);
sdl_renderclear(pr);
sdl_renderpresent(pr);
sdl_delay(5000);
// clean
sdl_destroywindow(pw);
sdl_destroyrenderer(pr);
sdl_quit();
end.
接下來加入輸入部分(暫時忽略物理計算)
isrunning := true;
while isrunning do
begin
// handle input
if sdl_pollevent(@e)=1 then
begin
case e.type_ of
sdl_quitev: isrunning := false;
end;
end;
// todo: do physics and then update
// render
sdl_setrenderdrawcolor(pr,0,0,0,255);
sdl_renderclear(pr);
sdl_renderpresent(pr);
end;
使用oop來整理一下
type tgame = class
private
pw : psdl_window;
pr : psdl_renderer;
public
isrunning: boolean;
procedure init(title : string;x,y,h,w,flags:integer );
procedure render();
procedure update();
procedure handleevents();
procedure clean();
end;
var
g : tgame;
begin
g := tgame.create;
g.init('hello',sdl_windowpos_centered,sdl_windowpos_centered,600,400,sdl_window_shown);
while g.isrunning do
begin
g.handleevents;
g.update;
g.render;
end;
g.clean;
g.free;
end.
makefile
main:main.pas
fpc -gh -fusdl2 -fl. main.pas
**參考 GO Grpc微服務開發一 概覽
git github.com juelite micro srv.git readme.md common 公共包 common.go 實現一些基礎方法,如配置檔案讀取,獲取redis控制代碼等 register.go 服務註冊封裝 conf 配置檔案目錄 config.conf 專案配置檔案,如c...
firewalld學習筆記(一)概覽
之前曾幾次接觸過linux系統,但始終不得法門,不入門就很難繼續下去。而立之年,緣分悄然而至,終於對linux有了些許入門的感覺,雖然還是小白 菜鳥,但是只要能入門,學起來也就快多了。雖說有了ubuntu這種圖形化的版本,但是linux的精髓還是命令列的方式,而且主要用途是伺服器而非家庭pc機。機緣...
RocketMQ訊息儲存一 概覽
前面介紹了訊息的傳送,這節主要介紹訊息的儲存。這裡只關注普通資訊,事務訊息在後面介紹。一般有分布式kv 檔案系統 db等,不同的mq根據設計的不同有各自的選擇,rocketmq同kafka一樣,選擇了檔案系統作為儲存方式,在儲存設計上借鑑了kafka。kafka將訊息用topic partition...