Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсач - ХО.doc
Скачиваний:
2
Добавлен:
26.09.2019
Размер:
157.18 Кб
Скачать

Министерство образования и науки РФ

Новосибирский государственный технический университет

Кафедра Автоматики Курсовая работа

по дисциплине программирование

Группа: АУ-04

Студент: Ананин В. В.

Проверил:

Новосибирск

2010

Курсовой проект

Проекты обязаны быть реализованы с использованием классов или готовых пакетов, построенных на основе объектно-ориентированного программирования. В зависимости от техники, к которой имеется доступ, в качестве таких пакетов могут быть использованы TVISION для Borland C++, Object Windows Library 1.0 или Object Windows Library 2.0 для Borland C++ или Visual C++ 6.0. Программа может выполнять любые функции, но студенты должны показать в ней умение пользоваться достаточно сложными библиотеками классов. В качестве таких программ могут быть предложены различные игры,

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

Примерные задания на курсовое проектирование.

    1. Разработать графическую игру.

    2. Разработать пользовательский интерфейс к файловой системе, включая манипулирование, просмотр и редактирование текстовых файлов.

    3. Разработать программу визуализации табличных данных.

    4. Разработать HTML-редактор с подсветкой тегов.

    5. Разработать редактор электронных таблиц.

    6. Разработать программу графического оформления текстовых объявлений.

Предпочтение отдается реальной тематике, определяемой интересами студента и согласуемой с преподавателем.

Правила игры:

Игроки по очереди ставят на свободные клетки поля 3х3 знаки (один всегда крестики, другой всегда нолики). Первый, выстроивший в ряд 3 своих фигуры по вертикали, горизонтали или диагонали, выигрывает.

Реализация:

Игра реализуется с помощью трех классов: TForm – описывающий саму визуализацию игры, pole – рабочую область, и player – класс, определяющий игрока.

TForm содержит метод обновления поля для внесения изменений.

Pole – очистку поля для начала новой игры и проверку на наличие допустимых ходов.

Player – ходы игроков и одноименный конструктор для реализации возможности ввода имени реального игрока.

В ходе игры ведется небольшая игровая статистика: кол-во побед, поражений, исходов с результатом «ничья», общее число сыгранных партий. Все они после выполнения программы выгружаются через поток в текстовый документ.

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

Листинг программы:

Main.cpp

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Main.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TMForm *MForm;

pole pol;

player comp, human;

//---------------------------------------------------------------------------

//Методы рукописных классов

void player::hod()

{

bool flag=false;

while (flag==false)

{

randomize();

x=random(3);

y=random(3);

if (pol.pol[x][y]==0) {flag=true;pol.pol[x][y]=2;}

}

}

void pole::reset()

{

for (int i=0;i<3;++i)

for (int j=0;j<3;++j)

pol[i][j]=0;

}

void pole::check()

{

bool flag=true;//true - поле заполнено; false - можно еще играть

int win=0;//0-никто не выйграл;1-выйграли крестики;2-выйграли нолики

int s=0;

for (int i=0;i<3;++i)//проверка по горизонтали

{

for (int j=0;j<3;++j)if(pol[i][0]!=pol[i][j])s=1;

if ((s==0)&&(pol[i][0]==1)) win=1;

if ((s==0)&&(pol[i][0]==2)) win=2;

s=0;

}

for (int i=0;i<3;++i)//проверка по вертикали

{

for (int j=0;j<3;++j)if(pol[0][i]!=pol[j][i])s=1;

if ((s==0)&&(pol[0][i]==1)) win=1;

if ((s==0)&&(pol[0][i]==2)) win=2;

s=0;

}

for (int j=0;j<3;++j)if(pol[0][0]!=pol[j][j])s=1;//проверка по главной диагонали

if ((s==0)&&(pol[0][0]==1)) win=1;

if ((s==0)&&(pol[0][0]==2)) win=2;

s=0;

for (int j=0;j<3;++j)if(pol[2][0]!=pol[j][2-j])s=1;//проверка по побочной диагонали

if ((s==0)&&(pol[2][0]==1)) win=1;

if ((s==0)&&(pol[2][0]==2)) win=2;

s=0;

for (int i=0;i<3;++i)

for (int j=0;j<3;++j)

if (pol[i][j]==0) flag=false;

if((flag==true)&&(win==0))

{

++sdraw;

++sgame;

MForm->MoreGame->Enabled=true;

MForm->Gstatus->Caption="Ничья";

MForm->P11->Enabled=false;MForm->P12->Enabled=false;

MForm->P13->Enabled=false;MForm->P21->Enabled=false;

MForm->P22->Enabled=false;MForm->P23->Enabled=false;

MForm->P31->Enabled=false;MForm->P32->Enabled=false;

MForm->P33->Enabled=false;

}

if(win==1)

{

++shuman;

++sgame;

MForm->MoreGame->Enabled=true;

MForm->Gstatus->Caption="Победа";

MForm->P11->Enabled=false;MForm->P12->Enabled=false;

MForm->P13->Enabled=false;MForm->P21->Enabled=false;

MForm->P22->Enabled=false;MForm->P23->Enabled=false;

MForm->P31->Enabled=false;MForm->P32->Enabled=false;

MForm->P33->Enabled=false;

}

if(win==2)

{

++scomp;

++sgame;

MForm->MoreGame->Enabled=true;

MForm->Gstatus->Caption="FAIL";

MForm->P11->Enabled=false;MForm->P12->Enabled=false;

MForm->P13->Enabled=false;MForm->P21->Enabled=false;

MForm->P22->Enabled=false;MForm->P23->Enabled=false;

MForm->P31->Enabled=false;MForm->P32->Enabled=false;

MForm->P33->Enabled=false;

}

}

player::player()

{

name=new char[30];

}

player::~player()

{

delete[] name;

}

//---------------------------------------------------------------------------

TMForm::refresh()

{

Draw->Caption=pol.sdraw;

Kolgame->Caption=pol.sgame;

ScoreComp->Caption=pol.scomp;

ScoreHuman->Caption=pol.shuman;

switch (pol.pol[0][0])

{

case 0:P11->Caption="";break;

case 1:P11->Caption="X";break;

case 2:{P11->Caption="O";P11->Enabled=false;};break;

}

switch (pol.pol[0][1])

{

case 0:P12->Caption="";break;

case 1:P12->Caption="X";break;

case 2:{P12->Caption="O";P12->Enabled=false;};break;

}

switch (pol.pol[0][2])

{

case 0:P13->Caption="";break;

case 1:P13->Caption="X";break;

case 2:{P13->Caption="O";P13->Enabled=false;};break;

}

switch (pol.pol[1][0])

{

case 0:P21->Caption="";break;

case 1:P21->Caption="X";break;

case 2:{P21->Caption="O";P21->Enabled=false;};break;

}

switch (pol.pol[1][1])

{

case 0:P22->Caption="";break;

case 1:P22->Caption="X";break;

case 2:{P22->Caption="O";P22->Enabled=false;};break;

}

switch (pol.pol[1][2])

{

case 0:P23->Caption="";break;

case 1:P23->Caption="X";break;

case 2:{P23->Caption="O";P23->Enabled=false;};break;

}

switch (pol.pol[2][0])

{

case 0:P31->Caption="";break;

case 1:P31->Caption="X";break;

case 2:{P31->Caption="O";P31->Enabled=false;};break;

}

switch (pol.pol[2][1])

{

case 0:P32->Caption="";break;

case 1:P32->Caption="X";break;

case 2:{P32->Caption="O";P32->Enabled=false;};break;

}

switch (pol.pol[2][2])

{

case 0:P33->Caption="";break;

case 1:P33->Caption="X";break;

case 2:{P33->Caption="O";P33->Enabled=false;};break;

}

}

//---------------------------------------------------------------------------

__fastcall TMForm::TMForm(TComponent* Owner)

: TForm(Owner)

{

refresh();

MoreGame->Enabled=false;

randomize();

if (random(2)==0)comp.hod();

refresh();

}

//---------------------------------------------------------------------------

void __fastcall TMForm::P11Click(TObject *Sender)

{

if ( pol.pol[0][0]==0 ) pol.pol[0][0]=1;

pol.check();

if (MoreGame->Enabled==false) {comp.hod();pol.check();}

P11->Enabled=false;

refresh();

}

//---------------------------------------------------------------------------

void __fastcall TMForm::P12Click(TObject *Sender)

{

if ( pol.pol[0][1]==0 ) pol.pol[0][1]=1;

pol.check();

if (MoreGame->Enabled==false) {comp.hod();pol.check();}

P12->Enabled=false;

refresh();

}

//---------------------------------------------------------------------------

void __fastcall TMForm::P13Click(TObject *Sender)

{

if ( pol.pol[0][2]==0 ) pol.pol[0][2]=1;

pol.check();

if (MoreGame->Enabled==false) {comp.hod();pol.check();}

P13->Enabled=false;

refresh();

}

//---------------------------------------------------------------------------

void __fastcall TMForm::P21Click(TObject *Sender)

{

if ( pol.pol[1][0]==0 ) pol.pol[1][0]=1;

pol.check();

if (MoreGame->Enabled==false) {comp.hod();pol.check();}

P21->Enabled=false;

refresh();

}

//---------------------------------------------------------------------------

void __fastcall TMForm::P22Click(TObject *Sender)

{

if ( pol.pol[1][1]==0 ) pol.pol[1][1]=1;

pol.check();

if (MoreGame->Enabled==false) {comp.hod();pol.check();}

P22->Enabled=false;

refresh();

}

//---------------------------------------------------------------------------

void __fastcall TMForm::P23Click(TObject *Sender)

{

if ( pol.pol[1][2]==0 ) pol.pol[1][2]=1;

pol.check();

if (MoreGame->Enabled==false) {comp.hod();pol.check();}

P23->Enabled=false;

refresh();

}

//---------------------------------------------------------------------------

void __fastcall TMForm::P31Click(TObject *Sender)

{

if ( pol.pol[2][0]==0 ) pol.pol[2][0]=1;

pol.check();

if (MoreGame->Enabled==false) {comp.hod();pol.check();}

P31->Enabled=false;

refresh();

}

//---------------------------------------------------------------------------

void __fastcall TMForm::P32Click(TObject *Sender)

{

if ( pol.pol[2][1]==0 ) pol.pol[2][1]=1;

pol.check();

if (MoreGame->Enabled==false) {comp.hod();pol.check();}

P32->Enabled=false;

refresh();

}

//---------------------------------------------------------------------------

void __fastcall TMForm::P33Click(TObject *Sender)

{

if ( pol.pol[2][2]==0 ) pol.pol[2][2]=1;

pol.check();

if (MoreGame->Enabled==false) {comp.hod();pol.check();}

P33->Enabled=false;

refresh();

}

//---------------------------------------------------------------------------

void __fastcall TMForm::MoreGameClick(TObject *Sender)

{

pol.reset();

MForm->P11->Enabled=true;MForm->P12->Enabled=true;

MForm->P13->Enabled=true;MForm->P21->Enabled=true;

MForm->P22->Enabled=true;MForm->P23->Enabled=true;

MForm->P31->Enabled=true;MForm->P32->Enabled=true;

MForm->P33->Enabled=true;

randomize();

if (random(2)==0)comp.hod();

refresh();

MoreGame->Enabled=false;

Gstatus->Caption="";

}

//---------------------------------------------------------------------------

void __fastcall TMForm::N4Click(TObject *Sender)

{

Close();

}

//---------------------------------------------------------------------------

void __fastcall TMForm::N2Click(TObject *Sender)

{

randomize();

if (random(2)==0)comp.hod();

std::ofstream out("result.txt",std::ios::out);

out<<"Результаты последней игры:\n";

out<<"Компьютер:"<<pol.scomp<<"\n";

out<<"Игрок:"<<pol.shuman<<"\n";

out<<"Ничьих:"<<pol.sdraw<<"\n";

out<<"Всего игр:"<<pol.sgame;

out.close();

pol.reset();

pol.scomp=pol.sdraw=pol.shuman=pol.sgame=0;

refresh();

Gstatus->Caption="";

MoreGame->Enabled=false;

}

//---------------------------------------------------------------------------

void __fastcall TMForm::NameChange(TObject *Sender)

{

Pname->Caption=human.name=Name->Text.c_str();

Pname->Caption=Pname->Caption+":";

}

//---------------------------------------------------------------------------

void __fastcall TMForm::FormCanResize(TObject *Sender, int &NewWidth,

int &NewHeight, bool &Resize)

{

P11->Left=ClientWidth*32/400;

P11->Top=ClientHeight*32/260;

P11->Width=ClientWidth*57/400;

P11->Height=ClientHeight*57/260;

P12->Left=ClientWidth*104/400;

P12->Top=ClientHeight*32/260;

P12->Width=ClientWidth*57/400;

P12->Height=ClientHeight*57/260;

P13->Left=ClientWidth*176/400;

P13->Top=ClientHeight*32/260;

P13->Width=ClientWidth*57/400;

P13->Height=ClientHeight*57/260;

P21->Left=ClientWidth*32/400;

P21->Top=ClientHeight*104/260;

P21->Width=ClientWidth*57/400;

P21->Height=ClientHeight*57/260;

P22->Left=ClientWidth*104/400;

P22->Top=ClientHeight*104/260;

P22->Width=ClientWidth*57/400;

P22->Height=ClientHeight*57/260;

P23->Left=ClientWidth*176/400;

P23->Top=ClientHeight*104/260;

P23->Width=ClientWidth*57/400;

P23->Height=ClientHeight*57/260;

P31->Left=ClientWidth*32/400;

P31->Top=ClientHeight*176/260;

P31->Width=ClientWidth*57/400;

P31->Height=ClientHeight*57/260;

P32->Left=ClientWidth*104/400;

P32->Top=ClientHeight*176/260;

P32->Width=ClientWidth*57/400;

P32->Height=ClientHeight*57/260;

P33->Left=ClientWidth*176/400;

P33->Top=ClientHeight*176/260;

P33->Width=ClientWidth*57/400;

P33->Height=ClientHeight*57/260;

Label1->Left=ClientWidth*264/400;

Label1->Top=ClientHeight*32/260;

Label1->Width=ClientWidth*61/400;

Label1->Height=ClientHeight*16/260;

ScoreComp->Left=ClientWidth*336/400;

ScoreComp->Top=ClientHeight*32/260;

ScoreComp->Width=ClientWidth*6/400;

ScoreComp->Height=ClientHeight*13/260;

Pname->Left=ClientWidth*291/400;

Pname->Top=ClientHeight*48/260;

Pname->Width=ClientWidth*34/400;

Pname->Height=ClientHeight*13/260;

ScoreHuman->Left=ClientWidth*336/400;

ScoreHuman->Top=ClientHeight*48/260;

ScoreHuman->Width=ClientWidth*6/400;

ScoreHuman->Height=ClientHeight*13/260;

Label3->Left=ClientWidth*291/400;

Label3->Top=ClientHeight*64/260;

Label3->Width=ClientWidth*34/400;

Label3->Height=ClientHeight*13/260;

Draw->Left=ClientWidth*336/400;

Draw->Top=ClientHeight*64/260;

Draw->Width=ClientWidth*6/400;

Draw->Height=ClientHeight*13/260;

Label4->Left=ClientWidth*272/400;

Label4->Top=ClientHeight*80/260;

Label4->Width=ClientWidth*53/400;

Label4->Height=ClientHeight*13/260;

Kolgame->Left=ClientWidth*336/400;

Kolgame->Top=ClientHeight*80/260;

Kolgame->Width=ClientWidth*6/400;

Kolgame->Height=ClientHeight*13/260;

MoreGame->Left=ClientWidth*264/400;

MoreGame->Top=ClientHeight*120/260;

MoreGame->Width=ClientWidth*89/400;

MoreGame->Height=ClientHeight*25/260;

Name->Left=ClientWidth*280/400;

Name->Top=ClientHeight*208/260;

Name->Width=ClientWidth*73/400;

Name->Height=ClientHeight*21/260;

Gstatus->Left=ClientWidth*112/400;

Gstatus->Top=ClientHeight*104/260;

}

Main.h

//---------------------------------------------------------------------------

#ifndef MainH

#define MainH

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Menus.hpp>

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <string.h>

#include <windows.h>

#include <stdio.h>

#include <iostream>

#include <fstream>

#include <stdlib.h>

//---------------------------------------------------------------------------

class TMForm : public TForm

{

__published: // IDE-managed Components

TLabel *P11;

TLabel *P12;

TLabel *P13;

TLabel *P21;

TLabel *P22;

TLabel *P23;

TLabel *P31;

TLabel *P32;

TLabel *P33;

TLabel *Label1;

TLabel *Pname;

TLabel *Label3;

TLabel *Label4;

TLabel *ScoreComp;

TLabel *ScoreHuman;

TLabel *Draw;

TLabel *Kolgame;

TButton *MoreGame;

TMainMenu *MainMenu1;

TMenuItem *N1;

TMenuItem *N2;

TMenuItem *N3;

TMenuItem *N4;

TEdit *Name;

TLabel *Gstatus;

void __fastcall P11Click(TObject *Sender);

void __fastcall P12Click(TObject *Sender);

void __fastcall P13Click(TObject *Sender);

void __fastcall P21Click(TObject *Sender);

void __fastcall P22Click(TObject *Sender);

void __fastcall P23Click(TObject *Sender);

void __fastcall P31Click(TObject *Sender);

void __fastcall P32Click(TObject *Sender);

void __fastcall P33Click(TObject *Sender);

void __fastcall MoreGameClick(TObject *Sender);

void __fastcall N4Click(TObject *Sender);

void __fastcall N2Click(TObject *Sender);

void __fastcall NameChange(TObject *Sender);

void __fastcall FormCanResize(TObject *Sender, int &NewWidth,

int &NewHeight, bool &Resize);

private: // User declarations

public: // User declarations

refresh();//обновляем игровое поле

__fastcall TMForm(TComponent* Owner);

};

class pole

{

public:

int pol [3][3];//массив игровое поле 0-пусто,1-крестик,2-нолик

int scomp,shuman,sdraw,sgame;//число побед компа/игрока

//, число ничьих и общее число игр

void reset();//обнуляем поле

void check();//true - поле заполнено; false - можно еще играть

};

class player

{

public:

int x,y;//координаты последнего хода

char* name;

void hod();

player();

~player();

};

//---------------------------------------------------------------------------

extern PACKAGE TMForm *MForm;

//---------------------------------------------------------------------------

#endif#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ExtCtrls.hpp>

//---------------------------------------------------------------------------

class TForm1 : public TForm

{

__published: // IDE-managed Components

TGroupBox *GroupBox1;

TGroupBox *GroupBox2;

TGroupBox *GroupBox3;

TEdit *Edit1;

TEdit *Edit2;

TEdit *Edit3;

TEdit *Edit4;

TLabel *Label1;

TLabel *Label2;

TLabel *Label3;

TLabel *Label4;

TLabel *Label5;

TLabel *Label6;

TButton *Button1;

TButton *Button2;

TLabel *Label7;

TLabel *Label8;

TEdit *Edit5;

TEdit *Edit6;

TShape *Shape1;

TShape *Shape2;

TTimer *Timer1;

TGroupBox *GroupBox4;

TLabel *Label9;

void __fastcall FormPaint(TObject *Sender);

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall Timer1Timer(TObject *Sender);

void __fastcall FormCreate(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]