21

Re: Шукаю програмний код гри в шашки на С++ Qt 5.5 (куплю)

Ну є там QPainter який малює зображення (ресурс) на полі, але циклом ніяк не виходить це діло зробити

Подякували: quez, FakiNyan2

22

Re: Шукаю програмний код гри в шашки на С++ Qt 5.5 (куплю)

чому?

23

Re: Шукаю програмний код гри в шашки на С++ Qt 5.5 (куплю)

blavrenyuk написав:

Ну є там QPainter який малює зображення (ресурс) на полі, але циклом ніяк не виходить це діло зробити

Код в студію

Подякували: leofun011

24

Re: Шукаю програмний код гри в шашки на С++ Qt 5.5 (куплю)

field.h

#pragma once
#include "Images.h"


enum Cell
{
    CL_CLEAR = 1,
    CL_SHIP, //red
    CL_DOT, //grien
    CL_HALF, //dama r
    CL_DIG // dama g
};

class Field
{
public:
    Field(Images *images, int lft, int tp, int wdth, int hght);
    ~Field();
    const QImage& getImage() const;
    void redraw();    //рисовка поля
    Cell getCell( int x, int y );
    void setCell( int x, int y, Cell cell );
    QPoint getCoord(int x, int y);
    int getX();
    int getY();

private:
    QImage *image;
    Images *pictures;
    QVector<Cell> field;
    int left,top,width,height;
};

25

Re: Шукаю програмний код гри в шашки на С++ Qt 5.5 (куплю)

images.h

#pragma once
#include <QtWidgets>

class Images
{
public:
    void load();
    QImage& get( const QString& imgName );


private:
    QMap<QString, QImage> images;

};

26

Re: Шукаю програмний код гри в шашки на С++ Qt 5.5 (куплю)

mainwindow.h

#pragma once

#include <QtWidgets>
#include "Images.h"
#include "Field.h"

namespace Ui
{
class MainWindow;
}

enum State
{
    ST_PLACING_SHIPS, //розстановка шашок.
    ST_MAKING_STEP, // робимо ход
    ST_WAITING_STEP //ход суперника
};

class MainWindow :
public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow( QWidget* parent = 0 );
    ~MainWindow();

protected:
    void paintEvent( QPaintEvent* event );  //функція яка визивається тоді коли треба перемалювати поле
    void mousePressEvent( QMouseEvent* ev ); //функція визивающаяса при натисканні клавіши мишки


private slots:

    void on_actionStart_activated();

private:
    void setStatus( const QString& status );



private:
    Ui::MainWindow* ui; //форма
    Images *pictures; //Місце де зберігаються фотографії
    Field *field1; // Поле
    State state; //Стан гри



};

27

Re: Шукаю програмний код гри в шашки на С++ Qt 5.5 (куплю)

hield.cpp

#include "Field.h"

Field::Field(Images* images, int lft, int tp, int wdth, int hght):
    pictures(images), left(lft), top(tp), width(wdth), height(hght)
{
    field.fill(CL_CLEAR,100);
    image = new QImage(width,height, QImage::Format_ARGB32);

}
Field::~Field()
{

}

const QImage& Field::getImage() const
{
    return *image;
}

void Field::redraw()
{
    image->fill(0);
    QPainter painter(image);
    double cfx=1.0*width/10.0;
    double cfy=1.0*height/10.0;
    for (int i=0;i<8;i++)
        for (int j=0;j<8;j++)
            switch(getCell(i,j))
            {
                case CL_DOT:
                painter.drawImage(i*cfx,j*cfy,pictures->get("dot")); //zeleuy
                break;
                case CL_HALF:
                painter.drawImage(i*cfx,j*cfy,pictures->get("half")); //redd
                break;
                case CL_SHIP:
                painter.drawImage(i*cfx,j*cfy,pictures->get("full")); //red
                break;
                case CL_DIG:
                painter.drawImage(i*cfx,j*cfy,pictures->get("dig")); //zelenuyd
                break;
            default: break;
            }
}

Cell Field::getCell( int x, int y )
{
    int n = y*8+x;

        if( x < 0 || y < 0 || x > 8 || y > 8 || (x+y)%2==0 ) //|| y==3 || y==4 )
            return CL_CLEAR;

//        if (state==ST_PLACING_SHIPS || x=5 || x=4 || y=4 || y=5)
//            return CL_CLEAR;


        if( n >= 0 && n < field.size() )
            return field[n];

       // qDebug() << "ERROR: no such cell";
        return CL_CLEAR;
}

void Field::setCell( int x, int y, Cell cell )
{
    int n = y * 8 + x;

        if( x >= 0 && y >= 0 && x < 8 && y < 8 &&
            n >= 0 && n < field.size())
        {
            field[n] = cell;
            return;
        }

        //qDebug() << "ERROR: no such cell (" << x << "x" << y << ")";
}

int Field::getX()
{
    return left;
}
int Field::getY()
{
    return top;
}

QPoint Field::getCoord(int x, int y)
{
    QPoint res;
    res.setX(-1);
    res.setY(-1);
    if (x<left || x>(left+width) || y<top || y>(top+height))
        return res;
    double cfx=1.0*width/10.0;
    double cfy=1.0*height/10.0;
    res.setX(1.0*(x-left)/cfx);
    res.setY(1.0*(y-top)/cfy);
    return res;
}

28

Re: Шукаю програмний код гри в шашки на С++ Qt 5.5 (куплю)

images.cpp

#include "Images.h"
#include <QOpenGLWidget>

void Images::load()
{
    images.insert( "field", QImage(":/doshka.png") );
    images.insert( "dot", QImage(":/zelenuy.png") );
    images.insert( "full", QImage(":/red.png") );
    images.insert( "half", QImage(":/redd.png") );
    images.insert( "dig", QImage(":/zelenuyd.png") );
}

QImage& Images::get( const QString& imgName )
{
    QMap<QString, QImage>::iterator i = images.find( imgName );

    if(i == images.end()) throw 1;
    return i.value();
}

29

Re: Шукаю програмний код гри в шашки на С++ Qt 5.5 (куплю)

main.cpp

#include "mainwindow.h"

int main( int argc, char* argv[] )
{
    QApplication a( argc, argv );


    MainWindow w;
    w.show();
    return a.exec();
}

30

Re: Шукаю програмний код гри в шашки на С++ Qt 5.5 (куплю)

mainwindow

#include "ui_mainwindow.h"
#include "mainwindow.h"

MainWindow::MainWindow( QWidget* parent ):
    QMainWindow( parent ),
    ui( new Ui::MainWindow )
{
    ui->setupUi( this );
    pictures = new Images;   //Створюємо новий клас імейдж
    pictures->load();   // загружаємо картинки з класу імейдж

    field1 = new Field(pictures, 61, 61, 603.1, 605); // рисуємо поле (коорднати висота і ширина)


    field1->redraw(); //перерисовуїм


    state=ST_PLACING_SHIPS;

    }

MainWindow::~MainWindow()
{
    delete pictures;
    delete ui;
}


void MainWindow::paintEvent (QPaintEvent*)
{
    QPainter painter( this );
    painter.drawImage(0, this->menuBar()->geometry().height(), pictures->get("field"));   //рисовка самого поля
    painter.drawImage(field1->getX(), this->menuBar()->geometry().height()+field1->getY(), field1->getImage()); // рисовка його елементів
    painter.drawImage(field1->getX(), this->menuBar()->geometry().height()+field1->getY(), pictures->get("dig"));

    if (state==ST_PLACING_SHIPS)
    {






//            QPoint point = field1->getCoord(point.x(), point.y());
//            field1->setCell(point.x(), point.y(), CL_SHIP);
//            field1->redraw();
//            this->update();

     }




}



void MainWindow::mousePressEvent( QMouseEvent* ev )
{
    QPoint pos = ev->pos();
    pos.setY( pos.y() - this->menuBar()->geometry().height());
    if (state==ST_PLACING_SHIPS)
    {
        QPoint point = field1->getCoord(pos.x(), pos.y());

       // qDebug() << "Hhip at" << point.x() << point.y();

        field1->setCell(point.x(), point.y(), CL_DIG);

        field1->redraw();
        this->update();
    }
    if (state==ST_MAKING_STEP)
    {

    }
    if (state==ST_WAITING_STEP)
    {

    }
}

void MainWindow::on_actionStart_activated()
{

}

31

Re: Шукаю програмний код гри в шашки на С++ Qt 5.5 (куплю)

Там є трохи лишнього звісно і дещо називається трішки по іншому, но основа думаю непогана для початку. Поле це зображення 600*600

32

Re: Шукаю програмний код гри в шашки на С++ Qt 5.5 (куплю)

Ну і плюс ресурси звісно , а також стандартна форма з дизайнера

33

Re: Шукаю програмний код гри в шашки на С++ Qt 5.5 (куплю)

В мене колись був код для гри в шашки, "хто скорше перейде" або кутики, "напханий тролейбус" на Delphi.
Крім того, я пробував писати AI для гри в кутики 3х4 на сайті ґейм контестер.