1. 程式人生 > >基於Linux下的GTK+2.0貪吃蛇遊戲開發

基於Linux下的GTK+2.0貪吃蛇遊戲開發

之前在很多平臺上都見過貪吃蛇的小遊戲但是唯獨在Linux 下見到這種遊戲程式設計很少,像Java 的C語言的有很多,這裡分享一下我自己參考別人的貪吃蛇程式碼移植到Linux 

平臺下並且這個小程式有多個.c和.h檔案組成,雖然很多人會說這樣子會造成全域性變數混亂,以及變數宣告的的重定義等,但是為了讓更好的理解這個貪吃蛇的邏輯,分成多個檔案,希望有助於大家學習和幫助,在原始碼中,我的程式碼的每一行都有詳細的註釋,因為本人才接觸Linux,能力有限,希望大家不要在意。

 在本程式中的貪吃蛇主要 分成了interface.c檔案 和snake.c,about .c,main.c檔案等4個檔案以及對應的interface.h ,snake.h,about.h,global.h的標頭檔案,因為以往的貪吃蛇都是一個檔案全部覆蓋,這裡我來分別說明下這4個.c檔案的作用,interface.c是用來建立 主要的遊戲視窗的主要程式碼以及interface 函式的主要功能實現區,snake.c檔案則是為小蛇的主要上下左右功能的實現區,about.c則為選單欄作者的主要實現區,而main.c則是呼叫了前臺動畫的主要的實現,以及綜合呼叫 主視窗函式的執行。這個程式的核心所在就是snake.c這個檔案了,其基本邏輯和其他各種語言寫的貪吃蛇的程式碼的邏輯基本相同,都是用一個timeou的計時器用來重新整理小蛇的座標的同時用小蛇的圖片來填充新的座標,同時用陣列來儲存小蛇的座標,實現小蛇的動態行走。

這裡定義了3個變數 因為是全域性的用的external而不用static靜態宣告的原因我在程式碼裡會解釋;

extern GdkPixbuf *pixbuf = NULL ;  //背景影象 

extern GdkPixbuf *pix1 = NULL ;   //蛇影象 
extern  GdkPixbuf *pix2 = NULL ;   //豆子影象 ;

這個void move ()這是小蛇運動的主要函式裡面的tailx ,taily,headx,heady分別用了陣列locate[0][0]和locate[0][1],locate[len][0],locate[len][1];來記錄小蛇的方向運動座標;這裡用switch分支語句來判讀朝向的方向,列如想左邊的情況:     

case LEFT: //左  
             headx--;
erase();
             if(headx == -1) 
{
game_end();
break;

            for(i=0; i<len; i++) 
            { 
                  locate[i][0] = locate[i+1][0]; 
                  locate[i][1] = locate[i+1][1];  
            } 


            locate[len][0] = headx; 
            locate[len][1] = heady; 
            draw(); 
            break; 


這裡因為這個遊戲區域的長度為60,因為向左邊所以headx的座標只能--,這裡因為要先出來,所以要先呼叫erase()函式來抹擦掉蛇尾部分,然後判讀headx座標如果為-1則判讀為頭部撞到牆的裡面條件成立則呼叫game_end()結束遊戲這個函式同時退出迴圈;然後在用for迴圈這裡定義了一個變數i和len,已經locate二維陣列,首先給i賦值為0,locate[0][0]即為headx座標,而locate[0][1]則為heady座標,這裡因為移動判讀用locate[i+1][0]即為下一個座標覆蓋為當前的座標,然後在用headx賦值為當前的locate[len][0]其他的方向同理;然後在呼叫draw函式畫上蛇頭

timer = gtk_timeout_add(50,(GtkFunction)game_run,NULL);這個變數位於 on_begin_clicked函式中主要是用timeout計時器每隔50秒來呼叫game_run函式的執行,同時一定程度上也可以實現小蛇的速度的加速 和減速,其他的遊戲區域同理都是呼叫函式來實現的,大致原理相同;


在檔案裡面我用了一個框圖來標註了這個遊戲區域的生成幫助大家更好的理解,以及流程圖來希望大家能多這個多檔案的更好理解,以及貪吃蛇的幫助文件,裡面內容都深刻的解析了貪吃蛇的每一個不服,因為能力有限,第一次寫部落格多有疏漏,希望大家多多包含

下面是文件的下載地址,希望能幫助大家更好的學習和使用貪吃蛇相關文件程式碼的下載

相關推薦

基於LinuxGTK+2.0貪吃遊戲開發

之前在很多平臺上都見過貪吃蛇的小遊戲但是唯獨在Linux 下見到這種遊戲程式設計很少,像Java 的C語言的有很多,這裡分享一下我自己參考別人的貪吃蛇程式碼移植到Linux  平臺下並且這個小程式有多個.c和.h檔案組成,雖然很多人會說這樣子會造成全域性變數混亂,以及變數宣

結對-開發貪吃遊戲-開發環境搭建過程

ips 開始 結果 開發 java 開發環境 ron 變量 環境搭建 項目:貪吃蛇遊戲開發 環境搭建:     Mac下:       1)官網下載jkd1.8版本。       2)下載IDE——eclipse或Myeclipse     win下:       1)官網

《結對-貪吃遊戲-開發環境搭建過程》

pytho img images cnblogs 配置環境變量 font 貪吃蛇 nbsp 技術 開發環境搭建過程:1.下載並安裝python(電腦上已經安裝過了就不截圖了) 2.配置環境變量 3.設置成功後,在cmd

結對-貪吃遊戲-開發環境搭建過程

後綴 文檔 開始 bsp span 宋體 mil clas 新建 安裝Python pygame 新建文本文檔並將後綴更改為py 開始編程結對-貪吃蛇遊戲-開發環境搭建過程

貪吃遊戲開發

設計思路 1.有一個地盤,四周有牆 2.有四個方形來組成一條蛇,蛇在此地盤內活動 3隨機生成一個食物,蛇吃到食物後身體變長。 4蛇遇到牆時死亡 5鍵盤上下來控制蛇的行走方向、 有待完善 程式碼 #!/user/bin/env python #-*- coding:ut

Linux安裝Redis5.0.2

1、下載redis 地址 http://download.redis.io/releases/redis-5.0.2.tar.gz 2、解壓tar -zxf redis-5.0.2.tar.gz 3、make編譯 3.1 缺少gcc環境需要yum install gcc 3.2 報

GTK+3.0相較與GTK+2.0建立盒的變化

在學習使用Glade軟體建立盒的過程中,發現GTK+3.0已經取消了gtk_hbox_new()和gtk_vbox_new(),只需要在常規選項裡面修改橫向和垂直即可。但為了弄懂GTK+3.0與GTK+3.0的不同,還是查閱了一些資源,主要區別如下: 一、GTK+2.0

LinuxElasticsearch-2.4.0的安裝與簡單配置(單節點)

下載地址: 傳到伺服器 ftp工具或者 rz指令,解壓檔案: tar -zxvf elasticsearch-2.4.0.tar.gz 建立使用者及授權 sudo useradd elsearch chown -R elsearch:elsearch /us

Linux安裝Elasticsearch5.0

https sea 內容 bsp lib 影響 inux 行數據 mit 載Elasticsearch   登錄官網 https://www.elastic.co/cn/downloads   選擇下載elasticsearch,根據需要選擇對應的安裝包,這裏選擇5.0

GTK學習筆記之LinuxGtk環境搭建

linux 配置 evel app C/C++語言 好的 學習 搜索 基本 下面介紹下Ubuntu 環境下具體的安裝過程: 1、配置安裝gcc/g++/gdb/make 等基本編程工具(必須裝好) 剛裝好的Ubuntu系統中已經有GCC了,但是這個GCC幾乎什麽文件都不能編

linux學習筆記2.0

筆記命令">" | >> file 標準輸入重定向(覆蓋);(追加)2> | 2>> file 標準錯誤重定向(覆蓋);(追加)file < 標準輸入重定向&> file == >file 2>&a

OracleLinux6.5Oracle11.2.0.4的安裝

following 升級 打開終端 alt min oinstall 路徑 product 設置環境變量 接http://blog.51cto.com/12784425/2310379此文1、準備工作Oracle11.2.0.4的安裝包;VNC客戶端vnc Viewer;

linuxGTK程式設計:顯示CPU使用率,記憶體使用率,網速。

StartOS 5.1版GNOME核心linux用了一段時間後,一直想視窗程式設計,QT最先搭建好,QT入門做了一個系統資訊,重灌系統後發現不能運行了,要安裝QT環境才能執行,於是想做一種低依賴的系統級程式設計,因為StartOS已經停止更新了,千辛萬苦第三次才成功搭建GTK環境,結合C語言對QT原

Win10OpenCV3.2.0+VS2015配置

注:       1)本文參考毛星雲的部落格配置過程,裡面有很多詳細的講解,有興趣可以移步;       2)配置完畢後的程式碼測試,可以參考 這裡。       &nb

《阿里巴巴MongoDB4.0高階實戰:基於Java Spring Boot 2.0》運維、監控、聚合、叢集、監控等高階面試題

《阿里巴巴MongoDB4.0高階實戰》阿里巴巴技術大牛 資深專家P9葉翔、專家徐雷.  NoSQL排名第一!最流行的NoSQL資料庫;谷歌、阿里巴巴、螞蟻金服、騰訊、百度等一線網際網路公司必備技能。 本系列課程涵蓋:MongoDB入門命令、管理、聚合分析、核心架構、資料庫管理、匯入匯出、索引、

初學,Linuxgtk+,glade,一些控制元件的使用函式

連線glade gtk_init (&argc, &argv); GtkBuilder *builder; builder = gtk_builder_new (); gtk_builder_add_from_file (builder, "(路徑)檔名.glade"

linux 安裝mysql8.0

linux下安裝mysql8.0 下載mysql $ wget http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/MySQL-8.0/mysql-8.0.4-rc-linux-glibc2.12-x86_64.tar.gz

如何在Linux安裝MySQL8.0

如何在Linux下安裝MySQL8.0 準備工作: mysql8.0 rpm檔案 測試工具(比如 idea的database工具) 安裝步驟: 1.     下載mysql的repo源,下載地址:https://dev.mysql.com/

Linuxmysql 8.0安裝教程

轉:https://www.jb51.net/article/146677.htm 準備工作: mysql8.0 rpm檔案 測試工具(比如 idea的database工具) 安裝步驟: 1. 下載mysql的repo源,下載地址: 進入Linux系統,輸入指令:

LinuxAzkaban2.5.0安裝

 1.下載Azkaban相關安裝包 用unzip 和tar –zxvf 分別解壓。  2. 系統時區設定  檢視時區  修改時區 時區檔案都在/usr/share/zoneinfo,複製相應時區覆蓋/etc/