国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

QT-貪吃小游戲

這篇具有很好參考價值的文章主要介紹了QT-貪吃小游戲。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


一、演示效果

QT-貪吃小游戲,qt,數(shù)據(jù)庫,開發(fā)語言

二、關鍵程序

#include "Snake.h"
#include "Food.h"
#include "Stone.h"
#include "Mushroom.h"
#include "Ai.h"
#include "Game.h"
#include "Util.h"
#include "SnakeUnit.h"
#include <QGraphicsScene>
#include <QGraphicsRectItem>
#include <QTimer>
#include <QDebug>
#include <typeinfo.h>
#include <stdlib.h>
#include <QDesktopWidget>

extern Game *g;
QGraphicsScene *sc;
QTimer *timer;

Snake::Snake()
{

}

Snake::Snake(QGraphicsScene *s, QString nam, int l)
{
    sc = s;
    length = l;
    size = 6;
    alive = false;
    direction = "right";
    score = 1;
    count = 0;    
    speed = size+2;
    name = nam;
    type = "me";

    //snake body
    int startX = Util::screenWidth()/2;
    int startY = Util::screenHeight()/2;
    color = Util::randomSnakeColor();
    pic = ":/images/snakeUnit"+QString::number(color)+".png";
    for(int i=0; i<length; i++){
        SnakeUnit *e = new SnakeUnit(name, this);
        if(i==0){
            e->setPixmap(QPixmap(":/images/snakeUnit"+QString::number(color)+"Head.png"));
            e->setTransformOriginPoint(e->pixmap().width()/2, e->pixmap().height()/2);
        }
        else{           
             e->setPixmap(QPixmap(pic));
             e->setZValue(-100);            
        }
        e->setPos(startX-i*size, startY);
        s->addItem(e);
        body.append(e);       
    }
    body[0]->setRotation(90);

    //boundary
    boundary = new QGraphicsEllipseItem(0, 0, 100, 100);
    boundary->setPen(QPen(Qt::transparent));
    boundary->setZValue(-1);
    s->addItem(boundary);

    //snake name
    info = new QGraphicsTextItem();
    info->setFont(QFont("calibri", 9));
    info->setPlainText(name);
    info->setDefaultTextColor(Qt::white);
    info->setPos(startX+10, startY+10);
    s->addItem(info);

    //move timer
    timer = new QTimer();
    connect(timer, SIGNAL(timeout()), this, SLOT(move()));
    timer->start(100);
}

void Snake::move()
{

    if(g->snake->alive == true){

        //move snake
        for(int i = body.size()-1; i>=0; i--){

            //body
            if(i != 0){
                body[i]->setX(body[i-1]->x());
                body[i]->setY(body[i-1]->y());               
            }

            //head
            else{
                    //move according to direction
                    if(direction == "right"){
                        body[0]->setX(body[0]->x()+speed);
                    }

                    else if(direction == "left"){
                         body[0]->setX(body[0]->x()-speed);
                    }

                    else if(direction == "up"){
                        body[0]->setY(body[0]->y()-speed);
                    }

                    else if(direction == "down"){
                        body[0]->setY(body[0]->y()+speed);
                    }

                }

        }

        //move boundary
        boundary->setX(body[0]->x()-boundary->rect().width()/2);
        boundary->setY(body[0]->y()-boundary->rect().height()/2);

        //move snake name
        info->setX(body[0]->x()+10);
        info->setY(body[0]->y()+10);

        //acc according to ai type
        if(type == "normal"){
            //change direction randomly with low attack level
            changeRandomDirection(1);
        }

        else if(type == "chipku"){
             avoidThreat();

            //change direction randomly according to attack level
            changeRandomDirection(g->attackLevel);
        }

        else if(type == "courage"){
            //move away from threat if present
            avoidThreat();

            //change direction randomly with low attack level
            changeRandomDirection(1);
        }

        else if(type == "paytu"){

            avoidThreat();

            //eat nearby food
            QList<QGraphicsItem *> food_items = boundary->collidingItems();
            for(int i=0; i<food_items.size(); i++){
                if(typeid(*(food_items[i])) == typeid(Food) || (typeid(*(food_items[i])) == typeid(Mushroom))){
                    //if food has minimum life of 2 seconds
                    Food *f = (Food*)food_items[i];
                    if(f->life > 1){
                        QString d = Util::giveDirection(body[0]->x(), body[0]->y(), f->x(), f->y());
                        if(d != Util::oppositeDirection(direction)){
                            changeDirection(d);
                            qDebug()<<"Food";
                        }
                    }
                }
            }
        }

        //check collssion
        QList<QGraphicsItem *> colliding_items = body[0]->collidingItems();
        for(int i=0; i<colliding_items.size(); i++){

            //food
            if(typeid(*(colliding_items[i])) == typeid(Food)){

                body[0]->scene()->removeItem(colliding_items[i]);
                delete colliding_items[i];                
                count+=2;

                //update length at each 10 score
                if(count > 10){
                    score++;
                    count = 0;
                    g->updateScore();

                    //append one unit
                    SnakeUnit *e = new SnakeUnit(name, this);
                    e->setPixmap(QPixmap(pic));
                    e->setPos(-100,-100);
                    body[0]->scene()->addItem(e);
                    body.append(e);
                }
            }

            // Mushroom
            else if(typeid(*(colliding_items[i])) == typeid(Mushroom)){
                g->scene->removeItem(colliding_items[i]);
                delete colliding_items[i];
                count+=5;
                g->updateScore();
            }

            //stone
            else if(typeid(*(colliding_items[i])) == typeid(Stone)){               
                destroy();
                break;
            }

            //other snake
            else if(typeid(*(colliding_items[i])) == typeid(SnakeUnit) && ((SnakeUnit*)colliding_items[i])->parent != this){
                qDebug()<<"Collission " + name + " : " + ((SnakeUnit*)colliding_items[i])->name;
                destroy();
                break;
            }

        }

        //check screen-bounds
        if(body[0]->x() > sc->width()) body[0]->setX(0);
        else if(body[0]->x() < 0) body[0]->setX(sc->width());
        else if(body[0]->y() < 0) body[0]->setY(sc->height());
        else if(body[0]->y() > sc->height()) body[0]->setY(0);
     }
}

void Snake::destroy(){

    //remove yourself and turn into clouds
    for(int i=0; i<body.size(); i++){
        SnakeUnit *s = body[i];
        new Food(sc, 1, 1, s->x(), s->y());
        g->scene->removeItem(s); //remove body from scene
    }
     g->scene->removeItem(info); //remove info from scene
    alive = false;
    g->snakes.removeOne(this);
    Util::removeReservedName(this->name);
    Util::removeReservedColor(this->color);
     g->scene->removeItem(this->boundary);

    //delete ai from memory
    if(type == "ai"){        
        delete this;
    }

    //add new snake
    g->generateAi(1);
}

void Snake::changeDirection(QString dir){
    if(dir=="right" && direction != "left"){
        direction = "right";
        body[0]->setRotation(0);
        body[0]->setRotation(90);
    }
    else if(dir=="left" && direction != "right"){
        direction = "left";
        body[0]->setRotation(0);
        body[0]->setRotation(-90);
    }
    else if(dir=="up" && direction != "down"){
        direction = "up";
        body[0]->setRotation(0);
    }
    else if(dir=="down" && direction != "up"){
        direction = "down";
        body[0]->setRotation(0);
        body[0]->setRotation(180);
    }
}

void Snake::changeRandomDirection(int attackLevel){
    if(Util::random(0,10) % 2 == 0){

        //change direction
        int r = Util::random(0,3+attackLevel);

        if(r==0 && direction != "left"){
            changeDirection("right");
        }
        else if(r==1 && direction != "right"){
            changeDirection("left");
        }
        else if(r==2 && direction != "down"){
            changeDirection("up");
        }
        else if(r==3 && direction != "up"){
            changeDirection("down");
        }

        //move towards the player
        else if(r>3){
            QString d = Util::giveDirection(body[0]->x(), body[0]->y(), g->snake->body[0]->x(), g->snake->body[0]->y());
            if(direction != Util::oppositeDirection(d)) changeDirection(d);
        }
    }
}

void Snake::avoidThreat(){
    bool threat = false;
    int threatPointX, threatPointY;
    QList<QGraphicsItem *> boundary_items = boundary->collidingItems();
    for(int i=0; i<boundary_items.size(); i++){
        //if its other's boundary or body
        if(typeid(*(boundary_items[i])) == typeid(QGraphicsEllipseItem) || (typeid(*(boundary_items[i])) == typeid(SnakeUnit)) || (typeid(*(boundary_items[i])) == typeid(Stone))){
            threat = true;
            threatPointX = (boundary_items[i])->x();
            threatPointY = (boundary_items[i])->y();
        }
    }
    if(threat == true){
        QString d = Util::giveDirection(body[0]->x(), body[0]->y(), threatPointX, threatPointY);
        if(d != Util::oppositeDirection(direction)){
            changeDirection(Util::oppositeDirection(d));
            qDebug()<<"Threat kiled";
        }
    }
}


三、下載鏈接

https://download.csdn.net/download/u013083044/88758860文章來源地址http://www.zghlxwxcb.cn/news/detail-804318.html

到了這里,關于QT-貪吃小游戲的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • c語言及數(shù)據(jù)結構實現(xiàn)簡單貪吃蛇小游戲

    c語言及數(shù)據(jù)結構實現(xiàn)簡單貪吃蛇小游戲

    目錄 一·貪吃蛇簡單介紹: 二·貪吃蛇的實現(xiàn)的開始準備: 2.1:歡迎界面的實現(xiàn): 2.2地圖的繪制: 2.3.1初始化蛇: 2.3.2初始化食物:? 三·貪吃蛇的運行操作: 3.1輔助信息的打?。?3.2蛇的下一步移動操作: 3.2.1判斷玩家按鍵情況: 3.2.2下一步遇到食物: 3.2.3下一步不是食物:

    2024年04月27日
    瀏覽(21)
  • 【Qt】三種方式實現(xiàn)抽獎小游戲

    【Qt】三種方式實現(xiàn)抽獎小游戲

    簡介 本文章是基本Qt與C++實現(xiàn)一個抽獎小游戲,用到的知識點在此前發(fā)布的幾篇文章。 下面是跳轉鏈接: 【Qt控件之QLabel】用法及技巧 鏈接: https://blog.csdn.net/MrHHHHHH/article/details/133691441?spm=1001.2014.3001.5501 【Qt控件之QPushButton】用法及技巧 鏈接: https://blog.csdn.net/MrHHHHHH/article

    2024年02月07日
    瀏覽(20)
  • QT-QML2048小游戲

    QT-QML2048小游戲

    https://download.csdn.net/download/u013083044/88758829

    2024年01月19日
    瀏覽(20)
  • 【貪吃蛇小游戲】寶塔面板快速搭建貪吃蛇小游戲Web網(wǎng)站 - 無需云服務器

    【貪吃蛇小游戲】寶塔面板快速搭建貪吃蛇小游戲Web網(wǎng)站 - 無需云服務器

    轉載自遠程內網(wǎng)穿透的文章:Linux使用寶塔面板搭建網(wǎng)站,并內網(wǎng)穿透實現(xiàn)公網(wǎng)訪問 寶塔面板作為簡單好用的服務器運維管理面板,它支持Linux/Windows系統(tǒng),我們可用它來一鍵配置LAMP/LNMP環(huán)境、網(wǎng)站、數(shù)據(jù)庫、FTP等,通過Web端輕松管理服務器。 以下教程,我們將演示使用寶塔

    2024年02月05日
    瀏覽(28)
  • 通關大一編程實踐,用C++基礎和Qt實現(xiàn)FlappyBird小游戲

    通關大一編程實踐,用C++基礎和Qt實現(xiàn)FlappyBird小游戲

    目錄 內容簡介 項目要求 項目實現(xiàn) 素材導入 核心思路 思路的轉變:從main到mainwindow 如何讓游戲動起來 如何設計一個物體類 如何從鍵盤輸入操作 如何繪制圖片? 如何初始化 項目源碼 該項目實現(xiàn)了基于Qt的FlappyBird動畫游戲開發(fā),我會從素材導入開始帶大家熟悉Qt開發(fā)的全過程

    2023年04月09日
    瀏覽(24)
  • 小游戲實戰(zhàn)丨基于PyGame的貪吃蛇小游戲

    小游戲實戰(zhàn)丨基于PyGame的貪吃蛇小游戲

    本期內容:基于pygame的貪吃蛇小游戲 下載地址:https://download.csdn.net/download/m0_68111267/88700188 實驗環(huán)境 python3.11及以上 pycharm pygame 安裝pygame的命令: pygame是一個開源的Python模塊,專門用于編寫電子游戲。它使用簡單、功能強大,因此非常適合初學者入門。pygame的主要特點包括圖

    2024年02月03日
    瀏覽(100)
  • 貪吃蛇小游戲(C++)

    貪吃蛇小游戲(C++)

    首先我們需要下載EasyX(具體的方法在EasyX專欄中有提到) easyX下載和繪制簡單基本圖形_小梁今天敲代碼了嗎的博客-CSDN博客 貪吃蛇這個游戲我們一定都玩過,玩家使用方向鍵操控一條“蛇”,蛇會朝著一個方向不斷移動,玩家可以通過上下左右鍵改變其運動方向。同時屏幕

    2023年04月27日
    瀏覽(23)
  • Python貪吃蛇小游戲

    Python貪吃蛇小游戲 若程序錯誤,請去終端下載random, turtle, freegames pip install random pip install turtle pip install freegames from random import randrange from turtle import * from freegames import square, vector food = vector(0, 0) snake = [vector(10, 0)] aim = vector(0, -10) def change(x, y): ??? \\\"\\\"\\\"Change snake direction.\\\"\\\"\\\" ???

    2024年02月03日
    瀏覽(25)
  • Java小游戲—貪吃蛇

    Java小游戲—貪吃蛇

    摘 要 近年來,java作為一種新的編程語言,以其簡單性、可移植性和平臺無關性等優(yōu)點,得到了各個國家廣泛地認可。本文基于java技術和Eclipse開發(fā)環(huán)境,設計并實現(xiàn)了一個操作簡單、界面美觀的“貪吃蛇”游戲?!柏澇陨摺庇螒蚴且粋€經(jīng)典的游戲,它因操作簡單、娛樂性強

    2024年02月03日
    瀏覽(20)
  • Javase | 貪吃蛇小游戲

    * 1:設計游戲圖紙 * 2:設計游戲窗體 * 3:在窗體上添加面板 * 4:在面板上添加畫筆方法(paintComponent方法) *5 用super調用父類的paintComponent (來每一次刷新界面) * 6:在面板上添加標題:用ImageIcon導入圖片類來導入圖片,然后調用有關方法 * 7:在面板上添加黑色游戲區(qū)框(

    2024年02月04日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包