From f6de2d2f6e3d25c80e91818553326a086420479e Mon Sep 17 00:00:00 2001 From: Hisumi Date: Fri, 13 May 2022 16:13:54 +0300 Subject: [PATCH] test --- Button.qml | 32 ++ CMakeLists.txt | 66 ++++ CMakeLists.txt.user | 695 +++++++++++++++++++++++++++++++++ Icon.qml | 31 ++ IconForm.ui.qml | 6 + Monitor.qml | 33 ++ gamelogic.cpp | 81 ++++ gamelogic.h | 44 +++ main.cpp | 22 ++ main.qml | 130 ++++++ qml.qrc | 9 + readme.md | 29 ++ resources.qrc | 13 + resources/Button1.png | Bin 0 -> 605 bytes resources/Button2.png | Bin 0 -> 612 bytes resources/icon.ico | Bin 0 -> 4286 bytes resources/monitor_ai.png | Bin 0 -> 631 bytes resources/monitor_player.png | Bin 0 -> 622 bytes resources/paper.png | Bin 0 -> 463 bytes resources/rock.png | Bin 0 -> 479 bytes resources/scissors.png | Bin 0 -> 515 bytes resources/vcrosdmonorusbyd.ttf | Bin 0 -> 41156 bytes rockPaperScissors.rc | 1 + 23 files changed, 1192 insertions(+) create mode 100644 Button.qml create mode 100644 CMakeLists.txt create mode 100644 CMakeLists.txt.user create mode 100644 Icon.qml create mode 100644 IconForm.ui.qml create mode 100644 Monitor.qml create mode 100644 gamelogic.cpp create mode 100644 gamelogic.h create mode 100644 main.cpp create mode 100644 main.qml create mode 100644 qml.qrc create mode 100644 readme.md create mode 100644 resources.qrc create mode 100644 resources/Button1.png create mode 100644 resources/Button2.png create mode 100644 resources/icon.ico create mode 100644 resources/monitor_ai.png create mode 100644 resources/monitor_player.png create mode 100644 resources/paper.png create mode 100644 resources/rock.png create mode 100644 resources/scissors.png create mode 100644 resources/vcrosdmonorusbyd.ttf create mode 100644 rockPaperScissors.rc diff --git a/Button.qml b/Button.qml new file mode 100644 index 0000000..8d2e2d1 --- /dev/null +++ b/Button.qml @@ -0,0 +1,32 @@ +import QtQuick 2.0 + +Rectangle { + id: root + color: "transparent" + property alias source: _button.source + property alias text: _icon.text + property alias margin: _icon.anchors.bottomMargin + Image { + id: _button + antialiasing: false + smooth: false + source: "qrc:/resources/Button1.png" + + anchors{ + fill: parent + margins: 10 + } + } + Icon{ + id: _icon + height: Math.min (root.height, root.width) + width: Math.min (root.height, root.width) + anchors{ + left: root.left + leftMargin: 0 + bottom: root.bottom + bottomMargin: 20 + } + } + +} diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..f31742a --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,66 @@ +cmake_minimum_required(VERSION 3.5) + +project(rockPaperScissors LANGUAGES CXX) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + + +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}") +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}") +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}") + +option(BUILD_SHARED_LIBS "Build using shared libraries" ON) + +if (${CMAKE_SYSTEM_NAME} MATCHES "Windows") + enable_language("RC") + set (WIN32_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/rockPaperScissors.rc) +endif() + + +# QtCreator supports the following variables for Android, which are identical to qmake Android variables. +# Check http://doc.qt.io/qt-5/deployment-android.html for more information. +# They need to be set before the find_package(Qt5 ...) call. + +#if(ANDROID) +# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") +# if (ANDROID_ABI STREQUAL "armeabi-v7a") +# set(ANDROID_EXTRA_LIBS +# ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so +# ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so) +# endif() +#endif() + +find_package(Qt5 COMPONENTS Core Quick REQUIRED) + +if(ANDROID) + add_library(rockPaperScissors SHARED + main.cpp + gamelogic.cpp + qml.qrc + resources.qrc + ) +else() + add_executable(rockPaperScissors + main.cpp + gamelogic.cpp + qml.qrc + resources.qrc + ${PROJECT_SOURCES} + ${WIN32_RESOURCES} + ) +endif() + +target_compile_definitions(rockPaperScissors + PRIVATE $<$,$>:QT_QML_DEBUG>) +target_link_libraries(rockPaperScissors + PRIVATE Qt5::Core Qt5::Quick) + + + diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user new file mode 100644 index 0000000..ea8ab30 --- /dev/null +++ b/CMakeLists.txt.user @@ -0,0 +1,695 @@ + + + + + + EnvironmentId + {5ac0d72a-5f7f-41f5-8571-40988ba02825} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + -fno-delayed-template-parsing + + true + + + + ProjectExplorer.Project.Target.0 + + Desktop Qt 5.14.2 MinGW 32-bit + Desktop Qt 5.14.2 MinGW 32-bit + qt.qt5.5142.win32_mingw73_kit + 1 + 0 + 0 + + + CMAKE_BUILD_TYPE:STRING=Debug + CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + + C:/Users/User/Documents/cppqt/build-rockPaperScissors-Desktop_Qt_5_14_2_MinGW_32_bit-Debug + + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Отладка + CMakeProjectManager.CMakeBuildConfiguration + + + + CMAKE_BUILD_TYPE:STRING=Release + CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + CMAKE_CXX_FLAGS:STRING=-mwindows + CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + + C:/Users/User/Documents/cppqt/build-rockPaperScissors-Desktop_Qt_5_14_2_MinGW_32_bit-Release + + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Выпуск + CMakeProjectManager.CMakeBuildConfiguration + + + + CMAKE_BUILD_TYPE:STRING=RelWithDebInfo + CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + + C:/Users/User/Documents/cppqt/build-rockPaperScissors-Desktop_Qt_5_14_2_MinGW_32_bit-RelWithDebInfo + + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Выпуск с отладочной информацией + CMakeProjectManager.CMakeBuildConfiguration + + + + CMAKE_BUILD_TYPE:STRING=MinSizeRel + CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + + C:/Users/User/Documents/cppqt/build-rockPaperScissors-Desktop_Qt_5_14_2_MinGW_32_bit-MinSizeRel + + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Выпуск минимального размера + CMakeProjectManager.CMakeBuildConfiguration + + 4 + + + 0 + Развёртывание + Развёртывание + ProjectExplorer.BuildSteps.Deploy + + 1 + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + rockPaperScissors + CMakeProjectManager.CMakeRunConfiguration.rockPaperScissors + rockPaperScissors + + false + + false + true + true + false + false + true + + C:/Users/User/Documents/cppqt/build-rockPaperScissors-Desktop_Qt_5_14_2_MinGW_32_bit-Release + + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + MyApp + CMakeProjectManager.CMakeRunConfiguration.MyApp + MyApp + + false + + false + true + true + false + false + true + + + + 2 + + + + ProjectExplorer.Project.Target.1 + + Desktop Qt 5.14.2 MinGW 64-bit + Desktop Qt 5.14.2 MinGW 64-bit + qt.qt5.5142.win64_mingw73_kit + 0 + 0 + 0 + + + CMAKE_BUILD_TYPE:STRING=Debug + CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + + C:/Users/User/Documents/cppqt/build-rockPaperScissors-Desktop_Qt_5_14_2_MinGW_64_bit-Debug + + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Отладка + CMakeProjectManager.CMakeBuildConfiguration + + + + CMAKE_BUILD_TYPE:STRING=Release + CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + + C:/Users/User/Documents/cppqt/build-rockPaperScissors-Desktop_Qt_5_14_2_MinGW_64_bit-Release + + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Выпуск + CMakeProjectManager.CMakeBuildConfiguration + + + + CMAKE_BUILD_TYPE:STRING=RelWithDebInfo + CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + + C:/Users/User/Documents/cppqt/build-rockPaperScissors-Desktop_Qt_5_14_2_MinGW_64_bit-RelWithDebInfo + + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Выпуск с отладочной информацией + CMakeProjectManager.CMakeBuildConfiguration + + + + CMAKE_BUILD_TYPE:STRING=MinSizeRel + CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + + C:/Users/User/Documents/cppqt/build-rockPaperScissors-Desktop_Qt_5_14_2_MinGW_64_bit-MinSizeRel + + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Выпуск минимального размера + CMakeProjectManager.CMakeBuildConfiguration + + 4 + + + 0 + Развёртывание + Развёртывание + ProjectExplorer.BuildSteps.Deploy + + 1 + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + + ProjectExplorer.CustomExecutableRunConfiguration + + + false + + false + true + false + false + true + + + + 1 + + + + ProjectExplorer.Project.TargetCount + 2 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/Icon.qml b/Icon.qml new file mode 100644 index 0000000..f08c9c6 --- /dev/null +++ b/Icon.qml @@ -0,0 +1,31 @@ +import QtQuick 2.4 + +Rectangle { + id: root + color: "transparent" + property string text: "" + + Image { + id: _icon + width: root.height + height: root.height + antialiasing: false + smooth: false + + anchors{ + fill: parent + margins: 40 + } + + source: if (root.text === "Камень"){ + "qrc:/resources/rock.png" + } + else if (root.text === "Ножницы"){ + "qrc:/resources/scissors.png" + } + else if (root.text === "Бумага"){ + "qrc:/resources/paper.png" + } + else "" + } +} diff --git a/IconForm.ui.qml b/IconForm.ui.qml new file mode 100644 index 0000000..9c6428c --- /dev/null +++ b/IconForm.ui.qml @@ -0,0 +1,6 @@ +import QtQuick 2.4 + +Item { + width: 400 + height: 400 +} diff --git a/Monitor.qml b/Monitor.qml new file mode 100644 index 0000000..af910f5 --- /dev/null +++ b/Monitor.qml @@ -0,0 +1,33 @@ +import QtQuick 2.0 + +Rectangle { + id: root + color: "transparent" + property alias source: _button.source + property alias text: _icon.text + property string type: "ai" + property alias margin: _icon.anchors.bottomMargin + Image { + id: _button + antialiasing: false + smooth: false + source: { + if (parent.type === "ai") "qrc:/resources/monitor_ai.png" + else "qrc:/resources/monitor_player.png" + } + + anchors{ + fill: parent + margins: 10 + } + } + Icon{ + id: _icon + height: Math.min (root.height, root.width) + width: Math.min (root.height, root.width) + anchors{ + centerIn: parent + } + } + +} diff --git a/gamelogic.cpp b/gamelogic.cpp new file mode 100644 index 0000000..46c80c6 --- /dev/null +++ b/gamelogic.cpp @@ -0,0 +1,81 @@ +#include "gamelogic.h" +#include +#include + + +GameLogic::GameLogic(QObject *parent) : QObject(parent) +{ + m_mainLabel = "Да начнётся игра"; +} + +QString GameLogic::mainLabel() +{ + return m_mainLabel; +} + +QString GameLogic::playerValue() +{ + return m_playerValue; +} + +QString GameLogic::aiValue() +{ + return m_aiValue; +} + +void GameLogic::playerChoice(int choice) +{ + startGame(choice); +} + +void GameLogic::setMainLabel(QString text) +{ + m_mainLabel = text; + emit mainLabelChanged(); +} + +void GameLogic::setPlayerValue(QString value) +{ + m_playerValue = value; + emit playerValueChanged(); +} + +void GameLogic::setAiValue(QString value) +{ + m_aiValue = value; + emit aiValueChanged(); +} + +void GameLogic::aiChoice() +{ + m_aiChoice = std::rand() % 3; +} + +void GameLogic::startGame(int plChoice) +{ + QVector naming(3); + naming[0] = "Камень"; + naming[1] = "Ножницы"; + naming[2] = "Бумага"; + + aiChoice(); + if (m_aiChoice == plChoice) + { + setMainLabel("Ничья"); + setAiValue(naming[m_aiChoice]); + setPlayerValue(naming[plChoice]); + } + else if ((m_aiChoice == 0 && plChoice == 2) || (m_aiChoice == 1 && plChoice == 0) || (m_aiChoice == 2 && plChoice == 1)) + { + setMainLabel("Победа!"); + setAiValue(naming[m_aiChoice]); + setPlayerValue(naming[plChoice]); + } + else if ((m_aiChoice == 2 && plChoice == 0) || (m_aiChoice == 0 && plChoice == 1) || (m_aiChoice == 1 && plChoice == 2)) + { + setMainLabel("Поражение!"); + setAiValue(naming[m_aiChoice]); + setPlayerValue(naming[plChoice]); + } + else return; +} diff --git a/gamelogic.h b/gamelogic.h new file mode 100644 index 0000000..6f8d725 --- /dev/null +++ b/gamelogic.h @@ -0,0 +1,44 @@ +#ifndef GAMELOGIC_H +#define GAMELOGIC_H + +#include + +class GameLogic : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString mainLabel READ mainLabel WRITE setMainLabel NOTIFY mainLabelChanged) + Q_PROPERTY(QString playerValue READ playerValue WRITE setPlayerValue NOTIFY playerValueChanged) + Q_PROPERTY(QString aiValue READ aiValue WRITE setAiValue NOTIFY aiValueChanged) + +public: + explicit GameLogic(QObject *parent = nullptr); + QString mainLabel(); + QString playerValue(); + QString aiValue(); + +signals: + void mainLabelChanged(); + void playerValueChanged(); + void aiValueChanged(); + +public slots: + void playerChoice(int choice); + void setMainLabel(QString text); + void setPlayerValue(QString value); + void setAiValue(QString value); + + +private: + //Атрибуты + QString m_mainLabel; + QString m_playerValue; + QString m_aiValue; + int m_aiChoice; + + //Методы + void aiChoice(); + void startGame(int plChoice); + +}; + +#endif // GAMELOGIC_H diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..093f024 --- /dev/null +++ b/main.cpp @@ -0,0 +1,22 @@ +#include +#include +#include "gamelogic.h" + +int main(int argc, char *argv[]) +{ + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + + QGuiApplication app(argc, argv); + qmlRegisterType< GameLogic >("RPS", 1, 0, "GameLogic"); + + QQmlApplicationEngine engine; + const QUrl url(QStringLiteral("qrc:/main.qml")); + QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, + &app, [url](QObject *obj, const QUrl &objUrl) { + if (!obj && url == objUrl) + QCoreApplication::exit(-1); + }, Qt::QueuedConnection); + engine.load(url); + + return app.exec(); +} diff --git a/main.qml b/main.qml new file mode 100644 index 0000000..9b099ca --- /dev/null +++ b/main.qml @@ -0,0 +1,130 @@ +import QtQuick 2.12 +import QtQuick.Window 2.12 +import RPS 1.0 + +Window { + id: root + visible: true + width: 640 + height: 480 + title: qsTr("Камень Ножницы Бумага") + + Rectangle { + id: _background + anchors.fill: parent + color: "#110022" + z: -100 + } + + GameLogic { + id: _rps + } + + Text { + id: _label + color: "#ffffff" + smooth: false + antialiasing: false + FontLoader{ + id: _font + source: "qrc:/resources/vcrosdmonorusbyd.ttf" + } + + font{ + family: _font.name + pointSize: 24 + } + + z: 5 + anchors { + centerIn: parent + } + text: _rps.mainLabel + } + Monitor{ + id: _playerMonitor + text: _rps.playerValue + type: "player" + width: root.width / 2 + height: root.height / 2 -10 + anchors.left: _background.left + anchors.top: _background.top + } + Monitor{ + id: _aiMonitor + text: _rps.aiValue + type: "ai" + width: root.width / 2 + height: root.height / 2 -10 + anchors.right: _background.right + anchors.top: _background.top + } + + Button{ + id: _rock + text: "Камень" + width: root.width / 3 + height: root.height / 2 -10 + anchors.left: _background.left + anchors.bottom: _background.bottom + MouseArea{ + anchors.fill: parent + onPressed: { + _rps.playerChoice(0) + parent.source = "qrc:/resources/Button2.png" + parent.margin = 10 + } + onReleased: { + parent.source = "qrc:/resources/Button1.png" + parent.margin = 20 + } + + } + } + Button{ + id: _scisseors + text: "Ножницы" + width: root.width / 3 + height: root.height / 2 -10 + anchors.horizontalCenter: _background.horizontalCenter + anchors.bottom: _background.bottom + MouseArea{ + anchors.fill: parent + onPressed: { + _rps.playerChoice(1) + parent.source = "qrc:/resources/Button2.png" + parent.margin = 10 + } + onReleased: { + parent.source = "qrc:/resources/Button1.png" + parent.margin = 20 + } + + } + } + Button{ + id: _paper + text: "Бумага" + width: root.width / 3 + height: root.height / 2 -10 + anchors.right: _background.right + anchors.bottom: _background.bottom + MouseArea{ + anchors.fill: parent + onPressed: { + _rps.playerChoice(2) + parent.source = "qrc:/resources/Button2.png" + parent.margin = 10 + } + onReleased: { + parent.source = "qrc:/resources/Button1.png" + parent.margin = 20 + } + + } + } + + + + +} diff --git a/qml.qrc b/qml.qrc new file mode 100644 index 0000000..fedbe40 --- /dev/null +++ b/qml.qrc @@ -0,0 +1,9 @@ + + + main.qml + resources.qrc + Button.qml + Icon.qml + Monitor.qml + + diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..d54ddff --- /dev/null +++ b/readme.md @@ -0,0 +1,29 @@ +Это игра Камень-ножницы-бумага. +Правила игры знакомы с детства, если нет, то вот краткое описание: + +"Камень сильнее Ножниц, Ножницы сильнее Бумаги, а Бумага сильнее Камня. +Суть игры в том, чтобы выбрать сущность сильнее оппонента." + +Программа разделена на игровую логику, написанную на C++, +где класс GameLogic, наследованный от QObject, передаёт в логику отображения +три параметра: mainLabel, playerValue, aiValue через Q_PROPERTY. + +mainLabel содержит текст, который оповещает о победе, поражении и ничьей. +playerValue - тоже текст с выбором Камень, Ножницы или Бумага от лица Игрока. +aiValue аналогично с playerValue, только от лица Противника(ИИ). + +ИИ выбирает простым генератором псевдослучайных чисел от 0 до 2, с шансом 33.3%. + +Логика отображения написана на QML. +Были созданы два элимента Button и Monitor, которые располагаются в главном окне. + +Мониторы имеют две текстуры, Игрока и Противника, которые выбираются в зависимости от +параметра type. + +Кнопки передают в игровую логику запуск метода startGame с атрибутом от 0 до 2, +в зависимости от выбора Игрока: Камень = 0, Ножницы = 1, Бумага = 2. + +Элемент Icon содежит в себе иконки для кнопок и мониторов, в зависимости от параметра text +иконка отображает текстуру Камня, Ножниц или Бумаги. + +Файл resources.qrc содержит в себе графику и шрифт. \ No newline at end of file diff --git a/resources.qrc b/resources.qrc new file mode 100644 index 0000000..1ad409c --- /dev/null +++ b/resources.qrc @@ -0,0 +1,13 @@ + + + resources/paper.png + resources/rock.png + resources/scissors.png + resources/Button1.png + resources/Button2.png + resources/monitor_ai.png + resources/monitor_player.png + resources/rpc.ico + resources/vcrosdmonorusbyd.ttf + + diff --git a/resources/Button1.png b/resources/Button1.png new file mode 100644 index 0000000000000000000000000000000000000000..5402f902fef7d4b2d7ce9549c44e93b7e05f43c9 GIT binary patch literal 605 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`90>3Uab;uU z5D^fz7FR76*WIF^b>B|;R~FaL#nS(;I{yFTaP3pdoZHTk2Tes5=t))CsRUUIDJY1T zq-ew(QJH^F;o9+Ke{TQ(|Nr0T1HZ2A__|>Fi>%^3Ub8E$8XSy+Rg_GWWTcF=H3}WA zcbB@~UXuLf(wtilUTxlav3v6R+|pjJkR)SEM<*5IXhVy>prBo)SueLPe*EnJ&i%hz zW?P-bd|49Y z7t8>33MD{Td!8ZCtpA=ajv*1PYp-48JEXwl_Rv=R;J*LKlB&sXHMsvL?lt)M$l5Te zus!$8N9onMUYdWe`e#nw%gy*8`!`41UVer6+uIXv#52Cgw&pnek0&AiR{p^a?-^g6 zXZW_2eF2b>{at_N-6tY8u2}Zg_CH;nC)XCzBhV9dCHi-tg)@R1y}KS~jx&5vblAhMV1Mt_qWw%4zB7F7zrEwp{B4CN+yApZ zs%7~3qlV#6j`Z}uDbm+#_w_dUZx8%k44ofy`glX(f`90>3Uab;uU z5D^fz7FR76*WIF^b>B|;R~FaL#nS(;I{yFTaP3pdoZHTk2Tes5=t))CsRUUIDJY1T zq-ew(QJH^F;o9+Ke{TQ(|Nr0T1HZ2A__|>Fi>%^3Ub8E$8XSy+Rg_GWWTcF=H3}WA zcbB@~UXuLf(wtilUTxlav3v6R+|pjJkR)SEM<*5IXhVy>prBo)SueLPe*EnJ&i%hz zW?P-bd|49Y z7t8>33MD{Td!8XMjMzL~977^n-(Gj*J7mDadU4)quATok3UK+(J+|_Xy3R+Y&ZE+b zO5raH|2$_8HebeiD*eow`d=H(9&UfcbYl89VXbfB48Jb@Ywh|gdEnkH$B;MG4Zn;V zYF{$G05UH9cX`nstZ;8W)2DYLGxQT3J|sGP40QP9=%-!~AF?ZXO^9SzL#6`wcy!yU1d-;an@1pL1ej9&b^YcUMz|dvzboFyt=akR{ E0DEXeUH||9 literal 0 HcmV?d00001 diff --git a/resources/icon.ico b/resources/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1bcc4db524e8add43fa0ee8515832b575027a56b GIT binary patch literal 4286 zcmcJTv1(L76o${Tu(6AUsFk~r6hRO~t#uLW)FRpieE=&fR}gH>GuYbMSj&Pwha&g@ zYacS+fAPcL!@WDRtln_)pP4yxzJKQ4G>I5>KeJircf7wCaXBK6y6C22-i7AZPq&tz z3zJE-#P!+7;xV-6ycGcMTtv57zqloGqW3vECUq zoS%L$vIqA^jo1qR29(nuo-6CrWWICo00(X1JJa(Pev1dZpz796DnfJGHsmuHS#~7CDE}ZiD zXDP3i({eS&=d+0Od8ZM3ilSJ=`1>-(%O5d%`!q(^MiDo=ehc#| Z+*`(Ex{AI1RqVexi)m4ucTrX^%P%UqsOSIy literal 0 HcmV?d00001 diff --git a/resources/monitor_ai.png b/resources/monitor_ai.png new file mode 100644 index 0000000000000000000000000000000000000000..3f5e698a6bc500eb2b3dee4ebe447daed115f0fb GIT binary patch literal 631 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`90>3Uab;uU z5D^fz7FR76*WIF^b>B|;R~FaL#nS(;I{yFTaP3pdoZHTk2Tes5=t))CsRUUIDJY1T zq-ew(QJH^F;o9+Ke{TQ(|Nr0T1HZ2A__|>Fi>%^3Ub8E$8XSy+Rg_GWWTcF=H3}WA zcbB@~UXuLf(wtilUTxlav3v6R+|pjJkR)SEM<*5IXhVy>prBo)SueLPe*EnJ&i%hz zW?P-bd|49Y z7t8>33MD{Td!8XMj3hl>977^nmtK$VYj)sq31sU|zqibqqnOgjrZ`?mMZ+j`@uYb)9mH+=gwqbg_nc?YV zhUd5MJIX86N+j$p{>e3E@7Df+PiK{{{Q1ps^!)sPQlazNB<8bf%xAHXXZMh2i;!o{ zkY}lQ&(89mP2@eR%6k?Qdv=%iKC_=a&lLV^lDkTNx$n2bTVC#)zpd&0vbB$HXKMdU z6VLj0w{=l{*}_*BjU4%>asIBE$-&QjVll%P1%~(XEFApTB!B+l)0n@``0?h_Wi^}5 z&FQ~B^UFi4&2~}gx7c5wsji>P`hMN!M|(@B?fG={^4A~sLRR4i!p`Xz=*)e3psk44ofy`glX(f`90>3Uab;uU z5D^fz7FR76*WIF^b>B|;R~FaL#nS(;I{yFTaP3pdoZHTk2Tes5=t))CsRUUIDJY1T zq-ew(QJH^F;o9+Ke{TQ(|Nr0T1HZ2A__|>Fi>%^3Ub8E$8XSy+Rg_GWWTcF=H3}WA zcbB@~UXuLf(wtilUTxlav3v6R+|pjJkR)SEM<*5IXhVy>prBo)SueLPe*EnJ&i%hz zW?P-bd|49Y z7t8>33MD{Td!8XMj08Mg977^nmtOVcJ7gf>61Z+c;_Tn?!YPw1oXdH0^97o|I}0qb zyL{p1w)0zf=4@rXR(9+2f9D_9RI5DskHqn->|-yR!)mmiEl8iOXnigF0dK}9`P(i2=Zzeaq zd))BwaKq!p4NsdJp5JG@yq{@ZJzLIyjvxQzG=4-cc(lH8(teh#ee7NTctUFLw=S|T zU-;^#QK0{{&T6Z5XSiSY*m4K>Gky6yx#7V{E8~9q#wQQ0wB^=resa(%+b%x+;_}yP ze&x(foxf)DyT_$wH9OAr^7Z5hy#LA@FEhP9@ssu0LSva3+x3fXn3{fmznBvk O&J3QeelF{r5}E*HT0!&x literal 0 HcmV?d00001 diff --git a/resources/paper.png b/resources/paper.png new file mode 100644 index 0000000000000000000000000000000000000000..d6d15255085473f480426025d3f201349c23211d GIT binary patch literal 463 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|4g~mwxU#Wv zhzJNnrk>uyodx^JiaD~s#rV(I@^9smDvxb`V!&TZ$&gQg-2^rWinRD!I96cj{E zQZ!D#Y0j+&uQuVXjY-8i(`mI@6vOpMH>t_TmpYBWLEgQeW_cq(3A2-n`_Gr8LX8T z2|Z~$<|QC`NxM z7PX3pcGwm0%;Waly<6>;f)$ew+wPllEj)zo%62X-@qK&NLI7wvgQu&X%Q~loCIGm1 Bnrk>uyodx^JiaD~s#rV(I@^9smDvxb`V!&TZ$&gQg-2^rWinRD!I96cj{E zQZ!D#Y0j+&uQuVXjY@Ai(`mI@7i;LLJbNWu7TeUOFej7AMTshq;b(?@A-G0s=w+l zeU}hcDh!>z%KNIi;wmX)gYO;;!h5TkED~xtDlWYL&Lp@cUz%YzgZTxaj2GX9-SaD$ zO_;Nr;;i2tDqN}ltibB%$308gr+)FbW^nj8?f*ur Sh3Y`ZFnGH9xvXnrk>uyodx^JiaD~s#rV(I@^9smDvxb`V!&TZ$&gQg-2^rWinRD!I96cj{E zQZ!D#Y0j+&uQuVXx36s7sn8b-m{aU`C1G(TzAWt8E{Vj`#$TGx3-tPkD8=iNR{6D zM-uyu8-B`LY{XZ^RPKCv)tiuzEE_q`mm+8T9X`8edK;;}aqNlC z`yRUBnE&JnQy(Pmkq-TyGsmj&$NT_kjpn?c(Z88gRBRuGoUo4qI+(%J)z4*}Q$iB} DnSuYZ literal 0 HcmV?d00001 diff --git a/resources/vcrosdmonorusbyd.ttf b/resources/vcrosdmonorusbyd.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5c10de0a1ddd862b64eb47399388c6dcf2008944 GIT binary patch literal 41156 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 literal 0 HcmV?d00001 diff --git a/rockPaperScissors.rc b/rockPaperScissors.rc new file mode 100644 index 0000000..46227e3 --- /dev/null +++ b/rockPaperScissors.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON "/resources/icon.ico"