QT實現貪吃蛇

2021-08-28 18:28:33 字數 2136 閱讀 5677

linux作業系統

qt5.5.1

貪吃蛇的身體用什麼形式展現

當方向改變時,蛇身如何實現轉向前進

如何記錄蛇身的每乙個座標

如何判斷遊戲結束

首先有兩種辦法實現,第一:用qpushbutton按鍵類,每個乙個按鍵就是蛇的一部分身體,另外:用qpaintevent繪圖事件畫出蛇的身體,個人認為用qpushbutton實現比較簡單粗暴,表面上看起來效果都一樣。

之前在想這個問題的時候很頭痛,進入了乙個誤區,一直在想蛇頭可以根據轉向而立刻改變,但是蛇尾該如何慢慢轉變過去呢,蛇身每轉一次就有乙個轉折點,後面的蛇身都需要根據這個轉折點來轉向,心想還需要記錄每乙個轉折點位址。但是後面發現根本就沒用這麼複雜,只需要將蛇身的每乙個點根據上乙個點的座標走,第乙個蛇身點根據蛇頭走就可以了。

由於我的蛇身每乙個節點都是乙個qpushbutton物件,而這個類有乙個獲取座標的函式geometry();和設定控制項座標的函式setgeometry();這樣我們只需要用乙個指標陣列記錄下每乙個qpushbutton的位址,通過遍歷陣列的方式就可知道每乙個蛇身節點的位址

qpushbutton *dot1 = new qpushbutton;

snake_buff[buff_ip++] = (unsigned int *)dot1;

遊戲結束有兩種情況,第一:當蛇頭碰到活動邊界時,遊戲結束。第二:當蛇頭碰到蛇身體時,遊戲結束。這裡就要注意用全域性變數存放活動邊界的座標。

main.h檔案

#include #include #include #include namespace ui 

class mainwindow : public qmainwindow

;

複寫void paintevent(qpaintevent*)繪圖函式,畫四條邊線。標頭檔案

#include"qpaintevent"

void mainwindow::paintevent(qpaintevent *)

mainwindow::mainwindow(qwidget *parent) :

qmainwindow(parent),

ui(new ui::mainwindow)

main.cpp定時器函式

主要實現功能:蛇的運動過程,判斷是否吃到食物,判斷是否遊戲結束

void mainwindow::ontimer()

switch (direction)

if(buff_ip) //當蛇身長度大於等於一時,將蛇身的後乙個節點等於前乙個節點的座標

qpushbutton* dot1 = (qpushbutton*)snake_buff[0];

dot1->setgeometry(x,y,dot_size,dot_size);

}//當貪吃蛇碰到邊界時,遊戲結束

if(y=line_down || x=line_right)

over();

//當貪吃蛇碰到自己尾巴時,遊戲結束

for(int i=2;igeometry().x() && y==dot2->geometry().y())

over();

}if(snake_food[2]) //當食物被吃掉時,建立下乙個食物座標

ui->label->settext(qstring::number(buff_ip)); //顯示當前遊戲得分

//設定蛇行駛速度,得分越高,速度越快

if(buff_ip==5)

timerid->setinterval(300);

else if(buff_ip==10)

timerid->setinterval(250);

else if(buff_ip==20)

timerid->setinterval(200);

else if(buff_ip==50)

timerid->setinterval(150);

}

QT專案 貪吃蛇

學習qt之後便找了貪吃蛇這個小專案來練習,因為沒有使用ui,因此在繪製方面工程量較大 首先了解貪吃蛇的遊戲邏輯 1.食物隨機出現,蛇頭與蛇尾隨機 完成遊戲初始化 2.蛇碰到食物蛇身變長 3.不按鍵時蛇按照當前方向前進 4.按鍵轉向 5.蛇觸碰到自己和邊緣遊戲結束 第一階段初步完成時,完成情況如下 第...

實現貪吃蛇

貪吃蛇 1.它的移動我們採用頭部加乙個尾巴減乙個 2.我們將view的大小分成很多個格仔 3.蛇的移動是以乙個格仔為單位 created by administrator on 2016 10 11.public class gameview extends view public gameview...

Qt版貪吃蛇遊戲

qt版貪吃蛇遊戲 以下是windows 7下執行截圖 以下是ubuntu下執行截圖 我在windows下編寫好之後,將原始碼在ubuntu下重新編譯執行,就可以在ubuntu下執行,這也充分體現出qt一次編寫,到處執行的優勢。關於貪吃蛇遊戲的設計原理就不講了,具體可以參考我的部落格 c 版貪吃蛇遊戲...