- •1 Введение
- •2 Сравнительный анализ языков программирования Си и Паскаль
- •2.1 История создания языков программирования
- •2.2 Типы данных
- •2.3 Комментарии
- •2.4 Операции
- •2.5 Операторы ветвления
- •2.6 Массивы
- •2.7 Строки
- •2.8 Подпрограммы
- •2.9 Указатели
- •2.10 Заключение сравнительного анализа языков Си и Паскаль
- •3 Постановка задачи
- •3.1 Алгоритм решения поставленной задачи
- •4 Реализация компьютерной игры «100 спичек»
- •4.1 Создание меню
- •4.2 Копка Help
- •4.3 Кнопка ComputerVsPerson
- •4.4 Кнопка PersonVsPerson
- •4.5 Кнопка ComputerVsComputer
- •4.6 Кнопка Exit
- •4.7 Данные к работе
- •5 Заключение
- •6 Список используемых источников
- •Приложение а (справочное)
4.7 Данные к работе
Игроки выбирают числа от единицы до десяти при помощи клавиатуры. Если игроку необходимо выбрать число 10, он нажимает на клавишу “0”, и программа принимает ее за десятку.
Программа должна считывать символы с клавиатуры и отвечать пользователю определённым действием, результаты которого выводятся на экран. Таким образом, к входным формам относятся данные, считанные с клавиатуры, к выходным – изображение, выводимое на экран монитора.
5 Заключение
По результатам выполнения курсовой работы можно сделать следующие выводы:
проведением сравнительного анализа между языками программирования Си и Паскаль был выявлен оптимальный язык для реализации поставленного задания, язык Си. Также сравнительный анализ показал, что язык программирования Си является более удобным и гибким для реализации проектов различного вида;
разработан алгоритм решения задачи в условиях, когда игра идет между человеком и машиной, машиной и машиной, человеком и человеком. Поставлена задача создания программы «100 спичек» со следующими условиями: графический интерфейс и меню пользователя, ознакомление с правилами игры. Было написано компьютерное приложение «100 спичек» на языке высокого уровня Си. В результате работы был разработан алгоритм стратегии игры в трех режимах, получен опыт разработки графического интерфейса, игрового процесса;
создана игра «100 спичек», обладающая следующими функциями: возможность выбора пунктов меню с помощью клавиатуры, возможность игры в трех режимах, дружественный интерфейс игры, возможность ознакомления с правилами игры.
6 Список используемых источников
1. Компьютер – Википедия [Электронный ресурс]: энциклопедия. – URL: http://ru.wikipedia.org/wiki/Компьютер
2. Программирование на paskal [Электронный ресурс] – URL: http://pascal.yeremey.ru/?page_id=32
3. Р. Уинер «Язык Турбо Си». (Изд-во «Мир», 1991. 383 стр.)
4. М. Уэит, С. Прата, Д. Мартин «Язык Си. Руководство для начинающих» (изд-во «Мир», 1988).
5. Касаткин А.И. От Turbo C к Borland C++. – Минск.: Вышэйшая школа, 1992.
6. Язык PASKAL. Программирование для начинающих [Электронный ресурс] – URL: http://pas1.ru/
7. Харбинсон С.П., Стил Г.Л. Язык программирования С. – М.:Бином, 2003. – 528 стр.
8. Визуальный словарь [Электронный ресурс]: словарь. – URL: http://vslovar.org.ru
9. ГОСТ 19781-90. Обеспечение систем обработки информации программное. Термины и определения. – Введ. 01.01.1992. – М.: ИПК Издательство стандартов, 2001.
Приложение а (справочное)
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <graphics.h>
#include <dos.h>
#include <string.h>
int number = 100;
int firstComp, strateg;
void printRest(int rest) {
char buffer[5];
sprintf(buffer, "%d", rest);
settextstyle(DEFAULT_FONT, 0, 4);
setcolor(9);
outtextxy(300, 200, buffer);
settextstyle(DEFAULT_FONT, 0, 1);
}
void printTextWithNumber(int num, int type) {
setcolor(8);
char buffer[5];
sprintf(buffer, "%d", num);
switch(type) {
case 1:
setcolor(4);
outtextxy(220, 160, "You choose number = ");
outtextxy(380, 160, buffer);
break;
case 2:
setcolor(1);
outtextxy(220, 360, "Person ");
outtextxy(280, 360, buffer);
outtextxy(300, 360, "WIN!!!");
break;
case 3:
setcolor(1);
outtextxy(220, 360, "Computer ");
outtextxy(300, 360, buffer);
outtextxy(320, 360, "WIN!!!");
break;
case 4:
setcolor(4);
outtextxy(220, 160, "Random comp choose number = ");
outtextxy(440, 160, buffer);
break;
}
}
void printOpponentStep(int prevNumber) {
char buffer[5];
sprintf(buffer, "%d", prevNumber);
setcolor(4);
outtextxy(220, 280, "Opponent choose number = ");
outtextxy(420, 280, buffer);
}
void printPersonHead(int personId, int prevNumber) {
char buffer[5];
printOpponentStep(prevNumber);
sprintf(buffer, "%d", personId);
setcolor(4);
outtextxy(220, 320, "Step of person ");
outtextxy(340, 320, buffer);
}
int personStep(int personId, int prevNumber) {
int choosedNumber;
int wrongNumber = 0;
int color = 7;
char ch;
do {
cleardevice();
printRest(number);
if(wrongNumber) {
setcolor(color);
outtextxy(220, 360, "Wrong pressed key!");
setcolor(255);
}
printPersonHead(personId, prevNumber);
ch = getch();
if (ch < '0' || ch > '9') {
wrongNumber = 1;
color += 1;
if (color > 7) color = 2;
}
}while (ch < '0' || ch > '9');
choosedNumber = ch - 48;
if (choosedNumber == 0) choosedNumber = 10;
printTextWithNumber(choosedNumber, 1);
getch();
return (choosedNumber);
}
int computerStep(int id, int prevCompNumber, int prevPersonNumber) {
int result;
if (firstComp == 0) {
result = 11 - prevPersonNumber;
} else {
if (strateg == 0) {
int sum = prevCompNumber + prevPersonNumber;
if (sum != 11 && sum > 0) {
strateg = 1;
result = (number - 1) % 10;
} else {
result = 1;
}
} else {
result = (number - 1) % 10;
}
}
return result;
}
int randomComputerStep(int id, int prev) {
int result;
cleardevice();
printRest(number);
printOpponentStep(prev);
if (number < 11)
if (number > 1)
result = rand() % (number - 1) + 1;
else result = 1;
else
result = rand() % 10 + 1;
printTextWithNumber(result, 4);
delay(2500);
return result;
}
void printError(int errorType) {
switch (errorType) {
case 0:
printf("Number not in range[1...10]! Repeat:\n");
break;
case 1:
setcolor(6);
outtextxy(220, 380,"Number too many for rest! Repeat your choose");
getch();
break;
}
}
void initGraph() {
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "C:\\TurboC++\\Disk\\TurboC3\\BGI");
errorcode = graphresult();
if (errorcode != grOk) {
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getchar();
exit(1);
}
}
void closeGraph() {
closegraph();
}
void gamePersonVSPerson() {
int personId = 1;
int prevNumber = 0;
number = 100;
while(number > 0) {
int currentNumber = personStep(personId, prevNumber);
if (currentNumber > number ) {
printError(1);
continue;
}
number -= currentNumber;
prevNumber = currentNumber;
if (personId == 1) personId = 2;
else personId = 1;
}
printRest(number);
printTextWithNumber(personId, 2);
getchar();
}
void gamePersonVSComp() {
cleardevice();
setcolor(1);
outtextxy(220, 220, "First step of:");
outtextxy(220, 235, "Key 1 - Person");
outtextxy(220, 250, "Other - Computer");
char ch = getch();
int counter;
if (ch - 48 == 1) {
firstComp = 0;
counter = 1;
} else {
firstComp = 1;
counter = 0;
}
strateg = 0;
number = 100;
int prevCompNumber = 0;
int prevPersonNumber = 0;
while (number > 0) {
int currNumber;
if (counter % 2 == 0) {
currNumber = computerStep(counter % 2 + 1, prevCompNumber, prevPersonNumber);
prevCompNumber = currNumber;
} else {
currNumber = personStep(counter % 2 + 1, prevCompNumber);
if (currNumber > number) {
printError(1);
continue;
}
prevPersonNumber = currNumber;
}
number -= currNumber;
counter++;
}
if (counter % 2 == 0)
printTextWithNumber(firstComp % 2 + 1, 3);
else
printTextWithNumber(firstComp % 2 + 1, 3);
printRest(number);
getch();
}
void gameCompVSComp() {
cleardevice();
setcolor(1);
outtextxy(220, 220, "Random computer is:");
outtextxy(220, 235, "Key 1 - First computer");
outtextxy(220, 250, "Other - Second Computer");
char ch = getch();
int counter;
if (ch - 48 == 1) {
firstComp = 0;
counter = 1;
} else {
firstComp = 1;
counter = 0;
}
strateg = 0;
number = 100;
int prevCompNumber = 0;
int prevPersonNumber = 0;
while (number > 0) {
int currNumber;
if (counter % 2 == 0) {
currNumber = computerStep(counter % 2 + 1, prevCompNumber, prevPersonNumber);
prevCompNumber = currNumber;
} else {
currNumber = randomComputerStep(counter % 2 + 1, prevCompNumber);
prevPersonNumber = currNumber;
}
number -= currNumber;
counter++;
}
if (counter % 2 == 0)
printTextWithNumber(firstComp % 2 + 1, 3);
else
printTextWithNumber(firstComp % 2 + 1, 3);
printRest(number);
getch();
}
void drawPoint(int x, int y, int hide) {
if (hide == 1) setcolor(0);
circle(x, y, 3);
if (hide == 1) setcolor(2);
}
int drawMenu() {
cleardevice();
setbkcolor(7);
char ch;
int x = 210;
int y = 225;
setcolor(2);
drawPoint(x, y, 0);
outtextxy(220, 200, "Select game");
setcolor(1);
outtextxy(220, 125, "!!! WELCOME !!!");
setcolor(4);
outtextxy(200, 160, "THE GAME 100 MATCHES");
setcolor(255);
outtextxy(220, 225, "Person VS Person");
outtextxy(220, 240, "Person VS Computer");
outtextxy(220, 255, "Computer VS Computer");
outtextxy(220, 270, "Help");
outtextxy(220, 285, "Exit");
ch = getch();
while (ch != 13) {
ch = getch();
drawPoint(x, y, 1);
switch (ch) {
case 80:
y += 15;
if (y > 285) y = 225;
break;
case 72:
y -= 15;
if (y < 225) y = 285;
break;
}
drawPoint(x, y, 0);
}
return y;
}
void help() {
cleardevice();
FILE *h;
h=fopen("C:\\HELP.TXT","r");
if ((h)==NULL) printf("Error. File not open. Check your path to file");
setcolor(15);
char str[36];
for (int i=0; i<5; i++) //stroki
{
//str[i] = (char *)malloc(35 * sizeof(char));
fgets(str, 35, h);
setcolor(1);
outtextxy(230, 190 + 15 * i, str);
}
if (getch()==13)
{
cleardevice();
setbkcolor(7);
int x = 210;
int y = 225;
setcolor(2);
drawPoint(x, y, 0);
outtextxy(220, 200, "Select game");
setcolor(1);
outtextxy(220, 125, "!!! WELCOME !!!");
setcolor(4);
outtextxy(220, 160, "THE GAME 100 MATCHES");
setcolor(255);
outtextxy(220, 225, "Person VS Person");
outtextxy(220, 230, "Person VS Computer");
outtextxy(220, 255, "Computer VS Computer");
outtextxy(220, 270, "Help");
outtextxy(220, 285, "Exit");
drawPoint(0,0,0);
int y0 = drawMenu();
switch (y0) {
case 225:
gamePersonVSPerson();
break;
case 240:
gamePersonVSComp();
break;
case 255:
gameCompVSComp();
break;
case 270:
help();
break;
}
}
fclose(h);
}
void main() {
number = 100;
initGraph();
int y = 0;
do{
y = drawMenu();
switch (y) {
case 225:
gamePersonVSPerson();
break;
case 240:
gamePersonVSComp();
break;
case 255:
gameCompVSComp();
break;
case 270:
help();
break;
}
}while(y != 285);
closeGraph();
}