95069

ИГРА РУССКАЯ РУЛЕТКА

Курсовая

Информатика, кибернетика и программирование

Курсовая работа посвящена разработке компьютерной игры, средствами программы Qt Creator - это средство быстрой разработки приложений. Оно предоставляет возможность быстро создавать прототипы приложений, которые базируются на диалоговых окнах, а также могут иметь главное окно, меню, строку состояния и панель инструментов.

Русский

2015-09-19

591 KB

0 чел.

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧЕРЕЖДЕНИЕ ВЫСШЕГО

ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
“ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ”
(ГОУВПО “ВГТУ”)

ФАКУЛЬТЕТ РАДИОТЕХНИКИ И ЭЛЕКТРОНИКИ

КАФЕДРА РАДИОЭЛЕКТРОННЫХ УСТРОЙСТВ И СИСТЕМ

СПЕЦИАЛЬНОСТЬ РАДИОЭЛЕКТРОННЫЕ СИСТЕМЫ И КОМПЛЕКСЫ

ОТЧЁТ ПО КУРСОВОЙ РАБОТЕ

ПО ДИСЦИПЛИНЕ: “ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ”

ПО ТЕМЕ: “ИГРА РУССКАЯ РУЛЕТКА”

Выполнил:

Жемчужников В.Г., РП-143

Проверил:

ст. преподаватель Руднев П.Е.

Защищён                                                                                                   Оценка

2015

Содержание

• Введение……………………………………………………………………………………………………………………... 3

• Техническое задание…………………………………………………………………………………………………… 4

• Блок-схема…………………………………………………………………………………………………………………… 5

• Описание алгоритма работы………………………………………………………………………………………. 6

• Пример работы……………………………………………………………………………………………………………. 14

• Заключение………………………………………………………………………………………………………………….  16

• Список используемой литературы………………………………………………………………………………  17

 

Введение

Курсовая работа посвящена разработке компьютерной игры, средствами программы Qt Creator  ̶  это средство быстрой разработки приложений. Оно предоставляет возможность быстро создавать прототипы приложений, которые базируются на диалоговых окнах, а также могут иметь главное окно, меню, строку состояния и панель инструментов.

Техническое задание

Средствами программы Qt Creator, разработать компьютерную игру «Русская рулетка» .

Русская рулетка — экстремальная азартная игра или пари с летальным исходом. По правилам игры в пустой барабан револьвера заряжается один патрон, после чего барабан проворачивается так, чтобы игроки не знали, где располагается единственный патрон. После этого происходит жеребьевка, согласно которой игроки подносят дуло револьвера к собственной голове и нажимают на спусковой крючок.

Блок-схема программы

 

  Нет

   

 Да    

 

Описание алгоритма работы программы

#include <mainwindow.h>

#include <ui_mainwindow.h>

#include <QTimer>

#include <QTime>

#include <QPixmap>

/* Подключаем библиотеки: #include <QTimer> (для смены картинок, т.е. для анимации вращения револьвера), #include <QTime> (для случайной генерации заряжания патрона в барабане револьвера), #include <QPixmap> (используется для вставки картинок). */

 

MainWindow::MainWindow(QWidget *parent) :

   QMainWindow(parent),

   ui(new Ui::MainWindow)

{

{

   ui->setupUi(this);

   QObject::connect(ui->pushButton_3,SIGNAL(clicked()),this,SLOT(kurok()));

       ui->label->setPixmap(QPixmap("stvol.png"));

       ui->label->setGeometry(550%this->width(),180%this->height(),500,500);

       

QObject::connect(ui >pushButton_2,SIGNAL(clicked()),this,SLOT(kolvoigr()));

       QTimer* timer =new QTimer(this);

       connect(timer,SIGNAL(timeout()),this,SLOT(kruty()));

       //запуск таймера

       timer->start(70);

}

}

/* Подключаем клавиши 

QObject::connect(ui >pushButton_2,SIGNAL(clicked()),this,SLOT(kolvoigr())); (клавиши списка меню выбора количества игроков), 

QTimer* timer =new QTimer(this); (определяем таймер для смены(анимации) вращения револьвера)

       connect(timer,SIGNAL(timeout()),this,SLOT(kruty())); (кнопка для старта игры, по нажатию на неё револьвер начинает крутиться)

timer->start(70); (запуск анимации) */

MainWindow::~MainWindow()

{

   delete ui;

}

void MainWindow::kruty()

{if(blok==0)

   {

   if(metka==1 && imet==i && pist==1)

   {

       if(chuv==2)

       {

           if(i==1 || i==4)

           {

               chetch++;

               pist=0;

               if(i==1 && patr!=chetch)

               {

                   povez1++;

               }

               if(i==4 && patr!=chetch)

               {

                   povez4++;

               }

           }

       }

       if(chuv==3)

       {

           if(i==1 || i==4|| i==5)

           {

               chetch++;

               pist=0;

               if(i==1 && patr!=chetch)

               {

                   povez1++;

               }

               if(i==4 && patr!=chetch)

               {

                   povez4++;

               }

               if(i==5 && patr!=chetch)

               {

                   povez5++;

               }

           }

       }

           if(chuv==4)

           {

               if(i==1 || i==2 || i==4 || i==5)

               {

                   chetch++;

                   pist=0;

                   if(i==1 && patr!=chetch)

                   {

                       povez1++;

                   }

                   if(i==4 && patr!=chetch)

                   {

                       povez4++;

                   }

                   if(i==5 && patr!=chetch)

                   {

                       povez5++;

                   }

                   if(i==2 && patr!=chetch)

                   {

                       povez2++;

                   }

               }

           }

               if(chuv==5)

               {

                   if(i==1 || i==2 || i==4 || i==5 || i==6)

                   {

                       chetch++;

                       pist=0;

                       if(i==1 && patr!=chetch)

                       {

                           povez1++;

                       }

                       if(i==4 && patr!=chetch)

                       {

                           povez4++;

                       }

                       if(i==5 && patr!=chetch)

                       {

                           povez5++;

                       }

                       if(i==2 && patr!=chetch)

                       {

                           povez2++;

                       }

                       if(i==6 && patr!=chetch)

                       {

                           povez6++;

                       }

                   }

               }

                   if(chuv==6)

                   {

                       if(i==1 || i==2 || i==3 || i==4 || i==5 || i==6)

                       {

                           chetch++;

                           pist=0;

                           if(i==1 && patr!=chetch)

                           {

                               povez1++;

                           }

                           if(i==4 && patr!=chetch)

                           {

                               povez4++;

                           }

                           if(i==5 && patr!=chetch)

                           {

                               povez5++;

                           }

                           if(i==2 && patr!=chetch)

                           {

                               povez2++;

                           }

                           if(i==6 && patr!=chetch)

                           {

                               povez6++;

                           }

                           if(i==3 && patr!=chetch)

                           {

                               povez3++;

                           }

                       }

       }

   }

/* В этих циклах переменная chuv определяет количество игроков, при условии если номер патрона в барабане не совпадает со значением счетчика (переменная chetch), то выстрела не происходит, т.е. выбранному игроку «повезло». Переменная povez при выполнении условия, указанного выше, с каждым разом увеличивается на единицу, что необходимо нам для статистики.  */

   if(patr==chetch)

   {

       stat();

       if(i==1)

           {

           ui->label_4->setText("Игрок убит!");

       }

           if(i==2)

           {

           ui->label_6->setText("Игрок убит!");

           }

           if(i==3)

           {

           ui->label_8->setText("Игрок убит!");

           }

           if(i==4)

           {

           ui->label_3->setText("Игрок убит!");

           }

           if(i==5)

           {

           ui->label_5->setText("Игрок убит!");

           }

           if(i==6)

           {

           ui->label_7->setText("Игрок убит!");

           }

/* В этих же циклах видим обратное условие т.е., если номер патрона в барабане совпадает со значением счетчика, то происходит выстрел и сообщается, что данный игрок проиграл‒ setText("Игрок убит!"); */

   }

   

          imet = rand()%6+1; //(Задает случайное число прокруток револьвера)

   if(i==1)

       {

       ui->label->setPixmap(QPixmap("stvol.png"));

       ui->label->setGeometry(550%this->width(),180%this->height(),500,500);}

       if(i==2)

       {

       ui->label->setPixmap(QPixmap("stvol_1.png"));

       ui->label->setGeometry(550%this->width(),180%this->height(),500,500);}

       if(i==3)

       {

       ui->label->setPixmap(QPixmap("stvol_2.png"));

       ui->label->setGeometry(550%this->width(),180%this->height(),500,500);}

       if(i==4)

       {

       ui->label->setPixmap(QPixmap("stvol_3.png"));

       ui->label->setGeometry(550%this->width(),180%this->height(),500,500);}

       if(i==5)

       {

       ui->label->setPixmap(QPixmap("stvol_4.png"));

       ui->label->setGeometry(550%this->width(),180%this->height(),500,500);

       }

       if(i==6)

       {

       ui->label->setPixmap(QPixmap("stvol_5.png"));

       ui->label->setGeometry(550%this->width(),180%this->height(),500,500);

       i=0;

       }

/* В данном цикле происходит вставка картинок револьвера по координатам. Это необходимо нам также для анимации. */

 }

}

void MainWindow::kurok()

{

   if(blokkur==1)

   {

    

       prokr++;

   }

}

/* С каждым нажатием на клавишу вращения револьвера, счетчик prokr увеличивается на единицу. Это нам необходимо для статистики количества сделанных ходов. */

void MainWindow::kolvoigr()

{

   if(ui->comboBox->currentText()=="2")

 {chuv=2;

       ui->label_3->setPixmap(QPixmap("game1.png"));

       ui->label_3->setGeometry(960%this->width(),150%this->height(),700,700);

       ui->label_4->setPixmap(QPixmap("game2.png"));

       ui->label_4->setGeometry(300%this->width(),20%this->height(),700,700);

       ui->label_5->setText(" ");

       ui->label_5->setGeometry(720%this->width(),400%this->height(),700,700);

       ui->label_6->setText(" ");

       ui->label_6->setGeometry(560%this->width(),(-240)%this->height(),700,700);

       ui->label_7->setText(" ");

       ui->label_7->setGeometry(400%this->width(),350%this->height(),700,700);

       ui->label_8->setText(" ");

       ui->label_8->setGeometry(850%this->width(),(-200)%this->height(),700,700);

       }

if(ui->comboBox->currentText()=="3")

{chuv=3;

   ui->label_3->setPixmap(QPixmap("game1.png"));

   ui->label_3->setGeometry(960%this->width(),150%this->height(),700,700);

   ui->label_4->setPixmap(QPixmap("game2.png"));

   ui->label_4->setGeometry(300%this->width(),20%this->height(),700,700);

   ui->label_5->setPixmap(QPixmap("game3.png"));

   ui->label_5->setGeometry(720%this->width(),400%this->height(),700,700);

   ui->label_6->setText(" ");

   ui->label_6->setGeometry(560%this->width(),(-240)%this->height(),700,700);

   ui->label_7->setText(" ");

   ui->label_7->setGeometry(400%this->width(),350%this->height(),700,700);

   ui->label_8->setText(" ");

   ui->label_8->setGeometry(850%this->width(),(-200)%this->height(),700,700);

     }

if(ui->comboBox->currentText()=="4")

{chuv=4;

   ui->label_3->setPixmap(QPixmap("game1.png"));

   ui->label_3->setGeometry(960%this->width(),150%this->height(),700,700);

   ui->label_4->setPixmap(QPixmap("game2.png"));

   ui->label_4->setGeometry(300%this->width(),20%this->height(),700,700);

   ui->label_5->setPixmap(QPixmap("game3.png"));

   ui->label_5->setGeometry(720%this->width(),400%this->height(),700,700);

   ui->label_6->setPixmap(QPixmap("game4.png"));

   ui->label_6->setGeometry(560%this->width(),(-240)%this->height(),700,700);

   ui->label_7->setText(" ");

   ui->label_7->setGeometry(400%this->width(),350%this->height(),700,700);

   ui->label_8->setText(" ");

   ui->label_8->setGeometry(850%this->width(),(-200)%this->height(),700,700);

     }

if(ui->comboBox->currentText()=="5")

{chuv=5;

   ui->label_3->setPixmap(QPixmap("game1.png"));

   ui->label_3->setGeometry(960%this->width(),150%this->height(),700,700);

   ui->label_4->setPixmap(QPixmap("game2.png"));

   ui->label_4->setGeometry(300%this->width(),20%this->height(),700,700);

   ui->label_5->setPixmap(QPixmap("game3.png"));

   ui->label_5->setGeometry(720%this->width(),400%this->height(),700,700);

   ui->label_6->setPixmap(QPixmap("game4.png"));

   ui->label_6->setGeometry(560%this->width(),(-240)%this->height(),700,700);

   ui->label_7->setPixmap(QPixmap("game5.png"));

   ui->label_7->setGeometry(400%this->width(),350%this->height(),700,700);

   ui->label_8->setText(" ");

   ui->label_8->setGeometry(850%this->width(),(-200)%this->height(),700,700);

     }

if(ui->comboBox->currentText()=="6")

{chuv=6;

     ui->label_3->setPixmap(QPixmap("game1.png"));

     ui->label_3->setGeometry(960%this->width(),150%this->height(),700,700);

     ui->label_4->setPixmap(QPixmap("game2.png"));

     ui->label_4->setGeometry(300%this->width(),20%this->height(),700,700);

     ui->label_5->setPixmap(QPixmap("game3.png"));

     ui->label_5->setGeometry(720%this->width(),400%this->height(),700,700);

     ui->label_6->setPixmap(QPixmap("game4.png"));

     ui->label_6->setGeometry(560%this->width(),(-240)%this->height(),700,700);

     ui->label_7->setPixmap(QPixmap("game5.png"));

     ui->label_7->setGeometry(400%this->width(),350%this->height(),700,700);

     ui->label_8->setPixmap(QPixmap("game6.png"));

     ui->label_8->setGeometry(850%this->width(),(-200)%this->height(),700,700);

     }

/* Строки, написанные выше задают игроков, т.е. при выборе значения «2» в выпадающем меню выбора количества игроков, появляются две картинки игроков. Максимальное количество игроков—«6». Вставка картинок происходит также по координатам.  */

patr = rand()%6+1;

// Генерируем случайное положение патрона в барабане револьвера.

blok=0;

blokkur=1;

/* Когда эта переменная blok принимает значение, не равное 0, т.е. после выстрела, револьвер перестает вращаться, а при значении blokkur отличным от 1 кнопка вращения становится неактивной. */

 

chetch=0;

prokr=0;

povez1=0;

povez2=0;

povez3=0;

povez4=0;

povez5=0;

povez6=0;

// Обнуляем указанные счетчики для корректного отображения статистки.

QString tmp,tmp1,tmp2,tmp3,tmp4,tmp5,tmp6;

tmp1.setNum(povez1);

tmp2.setNum(povez2);

tmp3.setNum(povez3);

tmp4.setNum(povez4);

tmp5.setNum(povez5);

tmp6.setNum(povez6);

ui->label_17->setText(tmp1);

ui->label_18->setText(tmp2);

ui->label_19->setText(tmp3);

ui->label_20->setText(tmp4);

ui->label_21->setText(tmp5);

ui->label_22->setText(tmp6);

   tmp.setNum(prokr);

    ui->label_16->setText(tmp);

}

void MainWindow::stat()

{ blok=1;

   blokkur=0;

  QString tmp,tmp1,tmp2,tmp3,tmp4,tmp5,tmp6;

  tmp1.setNum(povez1);

  tmp2.setNum(povez2);

  tmp3.setNum(povez3);

  tmp4.setNum(povez4);

  tmp5.setNum(povez5);

  tmp6.setNum(povez6);

  ui->label_17->setText(tmp1);

  ui->label_18->setText(tmp2);

  ui->label_19->setText(tmp3);

  ui->label_20->setText(tmp4);

  ui->label_21->setText(tmp5);

  ui->label_22->setText(tmp6);

      tmp.setNum(prokr);

       ui->label_16->setText(tmp);

}

/* По завершении игры выводится статистика: количества сделанных ходов, и удачных исходов. setNum осуществляет вывод численного значения соответствующих переменных в заданные поля (Label).  */

Пример работы программы

Рис. 1 Начало игры

Рис. 2 Проигрыш игрока C. Вывод статистики (слева)

Заключение

Итогом курсовой работы стала компьютерная игра «Русская рулетка», разработанная средствами программы Qt Creator.

 

Список используемой литературы

  1.  Ю.Э. Корчагин / Учебное пособие/ ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С и С++: ЛАБОРАТОРНЫЙ ПРАКТИКУМ.
  2.  Макс Шлее. Qt 4.5. Профессиональное программирование на C++— СПб: БХВ-Петербург, 2010.


Начало

Выбор количества игроков

Запуск игры

Жеребьевка

Произошел выстрел?

Игрок убит

Завершение игры и вывод статистики


 

А также другие работы, которые могут Вас заинтересовать

69155. СТРЕЛОВИДНЫЕ КРЫЛЬЯ 740.5 KB
  Нормальные нервюры могут устанавливаться перпендикулярно к оси крыла рис. вдоль хорд фактического обтекания крыла потоком рис. Если они поставлены по потоку то форма профиля в плоскости фактического обтекания крыла выдерживается лучше.
69156. Устройства, улучшающие взлетно-посадочные характеристики самолета 354 KB
  Устройства улучшающие взлетно посадочные характеристики самолета повысить несущие свойства крыла cyS можно обычными средствами механизации или энергетическими которые обеспечивают увеличение подъемной силы за счет силовой установки. Средства механизации повышают несущие свойства крыла.
69157. ИСТОРИЯ РАЗИТИЯ САМОЛЕТОВ. ЭТАПЫ ИХ СОЗДАНИЯ И ЭКСПЛУАТАЦИИ 385.5 KB
  Полет на аппаратах легче воздуха называется воздухоплаванием а на аппаратах тяжелее воздуха авиацией от латинского vis птица. Процесс развития самолетов обусловлен взаимным влиянием и взаимодействием между наукой производством и эксплуатацией самолетов.
69158. КОНСТРУКЦИЯ САМОЛЕТОВ ГРАЖДАНСКОЙ АВИАЦИИ И ИХ КЛАССИФИКАЦИЯ 1.55 MB
  Основные агрегаты самолета Самолеты относятся к летательным аппаратам тяжелее воздуха им характерен аэродинамический принцип полета. У самолетов подъемная сила Y создается за счет энергии воздушного потока омывающего несущею поверхность которая неподвижно закреплена относительно...
69159. НАГРУЗКИ САМОЛЕТА ПРИ ВЫПОЛНЕНИИ МАНЕВРОВ 884 KB
  В полете на самолет действуют: рис.1: тяга двигателя Р; аэродинамические силы подъемная сила Y и лобовое сопротивление Q; сила тяжести G. Эти силы показаны для самолета рассматриваемого в виде материальной точки. В общем случае силы действующие на самолет не находятся в равновесии.
69160. НАГРУЗКИ САМОЛЕТА ПРИ ПОЛЕТЕ В НЕСПОКОЙНОМ ВОЗДУХЕ 2.03 MB
  Турбулентность атмосферы Перегрузки от действия неспокойного воздуха возникают при движении воздуха направление которого не совпадает с направлением полета самолета или при турбулентных пульсациях воздуха. На высотах которые больше 1000 м эти потоки затухают и полет...
69161. НОРМЫ ПРОЧНОСТИ САМОЛЕТОВ. ОСНОВНЫЕ РАСЧЕТНЫЕ СЛУЧАИ НАГРУЖЕНИЯ САМОЛЕТА 729 KB
  В странах СНГ в настоящее время эксплуатируется большое количество самолетов, которые проектировались и изготавливались в соответствии с Едиными Нормами летной годности гражданских самолетов (ЕНЛГС). Они действовали до распада СССР.
69162. НАЗНАЧЕНИЕ КРЫЛА И ТРЕБОВАНИЯ К НЕМУ 1.53 MB
  Крыло — несущая поверхность самолета, которая служит для создания аэродинамической подъемной силы, необходимой для обеспечения полета и маневров самолета на всех режимах, предусмотренных ТТТ. Крыло принимает участие в обеспечении поперечной устойчивости и управляемости...
69163. Внешние нагрузки на крыло самолета и их распределение 1.13 MB
  На крыло самолета действуют следующие нагрузки: распределенные аэродинамические силы qаэр; распределенные массовые силы конструкции крыла qкр; сосредоточенные силы от грузов агрегатов находящиеся внутри или вне крыла gгр.