Необходима помощь в освоении азов создания игр
| |
redinard | Дата: Понедельник, 24 Октября 2011, 22:00 | Сообщение # 1 |
постоянный участник
Сейчас нет на сайте
| Я решил занятся созданием игр,начал с самых азов ,написал код,но допустил ошибку и не могу разобратся где она. Помогите найти её,вот код: Code #include <iostream> #include <string> using namespace std; enum SquareState {blank =' ',X='X',O='O'}; class gameBoard { private: const int WIDTH; const int HEIGHT; int* GameBoard; public: gameBoard():WIDTH(3),HEIGHT(3) { GameBoard=new int[9]; for (int i=0;i<9;i++) *(GameBoard+i)=blank; } ~gameBoard(){delete[]GameBoard;} void setX(int h,int w); void setO(int h,int w); bool isTaken(int h,int w); SquareState isLine(); void draw(); }; void gameBoard::setX(int h,int w) { *(GameBoard+h*HEIGHT+w)=X; } void gameBoard::setO(int h,int w) { *(GameBoard+h*HEIGHT+w)=O; } bool gameBoard::isTaken(int h,int w) { return*(GameBoard+h*HEIGHT+w)!=' '; } SquareState gameBoard::isLine() { if(*GameBoard==X &&*(GameBoard+1)==X &&*(GameBoard+2)==X) return X; if(*GameBoard==O &&*(GameBoard+1)==O &&*(GameBoard+2)==O) return O; if(*(GameBoard+3)==3 &&*(GameBoard+4)==X &&*(GameBoard+5)==X) return X; if(*(GameBoard+3)==3 &&*(GameBoard+4)==O &&*(GameBoard+5)==O) return O; if(*(GameBoard+6)==X &&*(GameBoard+7)==X &&*(GameBoard+8)==X) return X; if(*(GameBoard+6)==O &&*(GameBoard+7)==O &&*(GameBoard+8)==O) return O;
if(*GameBoard==X &&*(GameBoard+3)==X &&*(GameBoard+6)==X) return X; if(*GameBoard==X &&*(GameBoard+3)==O &&*(GameBoard+6)==O) return O; if(*(GameBoard+1)==X &&*(GameBoard+4)==X &&*(GameBoard+7)==X) return X; if(*(GameBoard+1)==X &&*(GameBoard+4)==O &&*(GameBoard+7)==O) return O; if(*(GameBoard+2)==X &&*(GameBoard+5)==X &&*(GameBoard+8)==X) return X; if(*(GameBoard+2)==X &&*(GameBoard+5)==O &&*(GameBoard+8)==O) return O;
if(*GameBoard==X &&*(GameBoard+4)==X &&*(GameBoard+8)==X) return X; if(*GameBoard==O &&*(GameBoard+4)==X &&*(GameBoard+8)==O) return O; if(*(GameBoard+2)==X &&*(GameBoard+4)==X &&*(GameBoard+6)==X) return X; if(*(GameBoard+2)==X &&*(GameBoard+4)==X &&*(GameBoard+6)==X) return O; return blank; } void gameBoard::draw() { cout<<endl; for(int i=1;i<HEIGHT;i++) { cout<<(char)*(GameBoard+i*HEIGHT); for(int c=1;c<WIDTH;c++) cout<<"|"<<(char)*(GameBoard+i*WIDTH+c); cout<<endl<<"------------"<<endl; } } class Game { public: gameBoard* doInput(string player,gameBoard* gb); bool inRange(int test); }; gameBoard* Game::doInput(string player,gameBoard* gb) { gb->draw(); string letter; if (player.compare("îäèí")==O) letter="X"; else if (player.compare("äâà")==O) letter="O"; else return gb; int input1,input2; do{ do{ cout<<"\nÈãðîê"<<player.c_str() <<",ïîæàëóéñòà ââåäèòå íîìåð ðÿäà äëÿ" <<letter.c_str()<<":"; cin>>input1; }while(!inRange(input1)); do{ cout<<"\nÈãðîê"<<player.c_str() <<",ïîæàëóéñòà ââåäèòå íîìåð ðÿäà äëÿ" <<letter.c_str()<<":"; cin>>input2; }while(gb->isTaken(input1,input2)); if(player.compare("îäèí")==O) gb->setX(input1,input2); else gb->setO(input1,input2); return gb; } bool Game::inRange(int test) { return test> -1 && test< 3; } int main(void) { gameBoard* gb=new gameBoard; Game g; string player1,plaer2; cout<<"Äîáðî ïîæàëîâàòü â êðåñòèêè íîëèêè!" <<"\nãðîê 1 ââåäèòå ñâî¸ èìÿ: "; cin>>plaeyr1; cout<<"\nÈãðîê 2 ââåäèòå ñâî¸ èìÿ: "; cin>>player2; while (gb->isLine()==C C) { gb=g.doInput("îäèí"gb); gb=g.doInput("äâà"gb); } gb->draw(); if(gb->isLine()==X) cout<<"\nÈãðîê 1 âû ïîáåäèëè !" <<"\nÊîíåö èãðû."; else cout<<"\nÈãðîê 2 âû ïîáåäèëè !" <<"\nÊîíåö èãðû."; return 0; }
Я белый и пушистый но имею когти и зубы
Сообщение отредактировал redinard - Понедельник, 24 Октября 2011, 22:06 |
|
| |
LQarum | Дата: Понедельник, 24 Октября 2011, 22:25 | Сообщение # 2 |
был не раз
Сейчас нет на сайте
| Код ошибкм в студию, здесь экстрасенсов нет, некоторые может на планшете и у них нет скролла кода, но по коду ошибки сразу укажут на нее?
Пишу все подряд на плюсах...
|
|
| |
redinard | Дата: Понедельник, 24 Октября 2011, 22:30 | Сообщение # 3 |
постоянный участник
Сейчас нет на сайте
| я же привёл код программы , необходимо просто скомпилировать и увидеть что не так ...
Я белый и пушистый но имею когти и зубы
|
|
| |
AGDev | Дата: Понедельник, 24 Октября 2011, 22:35 | Сообщение # 4 |
был не раз
Сейчас нет на сайте
| Quote (redinard) string player1,plaer2; cout<<"Äîáðî ïîæàëîâàòü â êðåñòèêè íîëèêè!" <<"\nãðîê 1 ââåäèòå ñâî¸ èìÿ: "; cin>>plaeyr1; cout<<"\nÈãðîê 2 ââåäèòå ñâî¸ èìÿ: "; cin>>player2;
определись с названиями переменных для начала))
|
|
| |
redinard | Дата: Понедельник, 24 Октября 2011, 22:42 | Сообщение # 5 |
постоянный участник
Сейчас нет на сайте
| это в принципе мелочи меня вот этот участок больше беспокоит: } bool Game::inRange(int test) {
Я белый и пушистый но имею когти и зубы
Сообщение отредактировал redinard - Понедельник, 24 Октября 2011, 22:47 |
|
| |
AGDev | Дата: Понедельник, 24 Октября 2011, 22:53 | Сообщение # 6 |
был не раз
Сейчас нет на сайте
| Quote gameBoard* Game::doInput(string player,gameBoard* gb) { gb->draw(); string letter; if (player.compare("îäèí")==O) letter="X"; else if (player.compare("äâà")==O) letter="O"; else return gb; int input1,input2; do{//А где закрывается этот цикл???? do{ cout<<"\nÈãðîê"<<player.c_str() <<",ïîæàëóéñòà ââåäèòå íîìåð ðÿäà äëÿ" <<letter.c_str()<<":"; cin>>input1; }while(!inRange(input1)); do{ cout<<"\nÈãðîê"<<player.c_str() <<",ïîæàëóéñòà ââåäèòå íîìåð ðÿäà äëÿ" <<letter.c_str()<<":"; cin>>input2; }while(gb->isTaken(input1,input2)); if(player.compare("îäèí")==O) gb->setX(input1,input2); else gb->setO(input1,input2); return gb;
}
|
|
| |
redinard | Дата: Понедельник, 24 Октября 2011, 23:03 | Сообщение # 7 |
постоянный участник
Сейчас нет на сайте
| спасибо ! Сейчас ещё один код подкину для проверки
Добавлено (24.10.2011, 23:02) --------------------------------------------- Code
#include <iostream> #include <cstring> #include "Bow.h" using namespace std;
class ArcheryCompetition { private: int rounds; float redScore; Bow red; float blueScore; Bow blue; public: ArcheryCompetition(int lrounds); ~ArcheryCompetition(); int compete(void); }; ArcheryCompetition::ArcheryCompetition(int lrounds): rounds(lrounds),red(Bow("красный")), blue(Bow("синий")),redScore(0),blueScore(0) { } ArcheryCompetition::~ArcheryCompetition() { } int ArcheryCompetition::compete() { for(int i=0;i<rounds;i++) { cout<<"Тут номер "<<i+1<<"."<<endl; red.draw(); blue.draw(); redScore = (red.fire()+redScore * i)/(i+1); blueScore = (blue.fire()+redScore * i)/(i+1); } if(redScore==blueScore) cout<<"ничья !!!\n"; else if(redScore<blueScore) cout<<"синий лук победил\n"; else cout<<"красный лук победил\n"; return 1; } void main(void) { ArcheryCompetition plymouthSquare(2); plymouthSquare.compete(); int get=0; cin>>get; }
Добавлено (24.10.2011, 23:03) --------------------------------------------- Code // bow.h class Bow { string color; bool drawn; int numOfArrows; public: Bow(string aColor); ~Bow(); void draw(); int fire(); };
Я белый и пушистый но имею когти и зубы
Сообщение отредактировал redinard - Понедельник, 24 Октября 2011, 23:04 |
|
| |
AGDev | Дата: Понедельник, 24 Октября 2011, 23:25 | Сообщение # 8 |
был не раз
Сейчас нет на сайте
| а где описание методов класса Bow?
Сообщение отредактировал AGDev - Понедельник, 24 Октября 2011, 23:27 |
|
| |
redinard | Дата: Вторник, 25 Октября 2011, 00:27 | Сообщение # 9 |
постоянный участник
Сейчас нет на сайте
| не знаю если честно,код был взят с книги,даже под себя не интерпритировал ... Добавлено (25.10.2011, 00:27) --------------------------------------------- создал менюшку и в очередной раз наткнулся на проблемму Code // hello.cpp #include <iostream> #include "MenuUtility.h" using namespace std;
int main(void) { using namespace menuNamespace; string example[]={"àòàêîâàòü","îòñòóïàòü"}; menu(example,2); return 0; } Code //MenuUtility.cpp #include <iostream> #include <string> using namespace std;
namespace menuNamespace { int menu(string*strArray,int size) { int userResponse; cout<<"Âàðèàíòû: "; while(userResponse <1||userResponse>size) { for(int i=0;i<size;i++) { cout<<i+1<<")"<<strArray[i]<<endl; } cin>>userResponse; } return userResponse; } } Code //MenuUtillity.h #include <iostream> #include <string> using namespace std; namespace menuNamespace { int menu(string* strArray,int size); }
Я белый и пушистый но имею когти и зубы
|
|
| |
0x90 | Дата: Вторник, 25 Октября 2011, 09:53 | Сообщение # 10 |
участник
Сейчас нет на сайте
| Код Вашей "менюшки" успешно компилируется(и собирается), но у меня такое чувство, будто вы абсолютно не понимаете, что пишите. Лучше выучите сначала азы С++. Интересно, в книге так и написано? То есть переменной userResponce не присваивается начальное значение?
|
|
| |
redinard | Дата: Вторник, 25 Октября 2011, 12:35 | Сообщение # 11 |
постоянный участник
Сейчас нет на сайте
| Да действительно в книге так и написанно,и азы программирования я выучил(я уже второй курс на программиста учусь),а в какой проге эта минюшка успешно скомпилировалась ?
Я белый и пушистый но имею когти и зубы
|
|
| |
0x90 | Дата: Вторник, 25 Октября 2011, 12:41 | Сообщение # 12 |
участник
Сейчас нет на сайте
| Quote Да действительно в книге так и написанно Ну тогда, в данном случае, это очевидный ляп автора. Quote а в какой проге эта минюшка успешно скомпилировалась ? В VC++ 2008. Но компилировать должны и все остальные компиляторы, ошибок я не вижу. Вы чем компилируете? Покажите лог ошибки.
|
|
| |
redinard | Дата: Вторник, 25 Октября 2011, 12:45 | Сообщение # 13 |
постоянный участник
Сейчас нет на сайте
| Я компилирую в Dev C++ Quote [Linker error] undefined reference to `menuNamespace::menu(std::string*, int)' ld returned 1 exit status
Я белый и пушистый но имею когти и зубы
|
|
| |
0x90 | Дата: Вторник, 25 Октября 2011, 12:57 | Сообщение # 14 |
участник
Сейчас нет на сайте
| Хмм, сейчас потестирую и с MinGW Добавлено (25.10.2011, 12:57) --------------------------------------------- Все комплится и собирается прекрасно. Есть подозрения, что вы пытаетесь инклудить MenuUtility.h, в то время, как файл называется MenuUtillity.h
|
|
| |
redinard | Дата: Вторник, 25 Октября 2011, 13:06 | Сообщение # 15 |
постоянный участник
Сейчас нет на сайте
| Сейчас откомпилировал в MVC ,всё работает,вот только он не понимает русский язык ((
Я белый и пушистый но имею когти и зубы
|
|
| |
0x90 | Дата: Вторник, 25 Октября 2011, 13:13 | Сообщение # 16 |
участник
Сейчас нет на сайте
| Внутри функции main Code setlocale( LC_ALL, "rus" ); Добавлено (25.10.2011, 13:13) --------------------------------------------- P.S. Что за книга?
|
|
| |
redinard | Дата: Вторник, 25 Октября 2011, 17:43 | Сообщение # 17 |
постоянный участник
Сейчас нет на сайте
| "программирование на С++" марк ли,дирк хенкеманс
Добавлено (25.10.2011, 13:22) --------------------------------------------- Я кстати разобрался в Dev C++?а Quote setlocale( LC_ALL, "rus" ); для MVC++ 6 не катит,компилируется,но при запуске выдаёт ошибку...
Добавлено (25.10.2011, 17:43) --------------------------------------------- вот ещё один код на ваше обозрение Code // pirateTawn.cpp #include <iostream> #include <string> #include "MenuUtility.h" #include "pirateTown.h" using namespace std;
using menuNamespace::menu;
namespace wharf { void menu() { string options[]= {"ïðûãíóòü â âîäó", "âçÿòü ãðåáíóþ øëþïêó è óïëûòü â çâêàò.", "âçîéòè íà áîðò êðîâàâîãî âåòðà.", "îòïðàâèòñÿ â ãîðîä"}; int userResponse=::menu(options,4); switch(userResponse) { case 1: cout<<"Òû ïðûãàåøü â âîäó." <<"Âíåçàïíî òû ñëûøèøü" <<"ñìåõ,è òóò æå\n" <<"îñîçíà¸øü ÷òî çàáûë" <<"ñíÿòü îäåæäó." <<"Òû âûëàçèåøü èç âîäû" <<"ïðîìîêøèé íàñêâîçü\n"; menu(); break; case 2: cout<<"Òû õâàòàåøü íå áîëüøóþ êðàñíóþ ëîäêó " <<"è óïëûâàåøü â çàêàò" <<"Àõ,ñëàâà."<<endl; break; case 3: cout<<"Òû âîçâðàùàåøñÿ íà áîðò êðîâàâîãî âåòðâ" <<"è æä¸øü êîãäà âåðíóòñÿ òâîè äðóçüÿ," <<"âäîâîëü íàâåñåëèâøèñü. \n"; break; case 4: street::menu(); break; } } } //îáðàáîòêà ñîáûòèé â òàâåðíå namespace tavern { void menu(void) { string options[]= {"Çôêàçàòü âûïèâêó" "Íà÷àòü øóìíóþ äðàêó" "Âûòè íà óëèöó."}; int userResponse=::menu(options,3); switch(userResponse) { case 1: cout<<"Òû çàêàçàë êîêòåéëü" <<"\"ËÅÍÒßÉ\"\n"; menu(); break; case 2: cout<<"Òû íà÷àë øóìíóþ äðàêó\n"; menu(); break; case 3: street::menu(); break; } } } //îáðàáîòêà ñîáûòèé ïðîèñõîäÿøèõ íà óëèöå namespace street { void menu(void) { string options[]= {"Äâèíóòñÿ ê ïðè÷àëó", "Âîéòè â òàâåðíó", "Âîéòèâ îðóæåéíûé ìàãàçèí", "Íà÷àòü äðàêó."}; int userResponse=::menu(options,4); switch(userResponse) { case 1: wharf::menu(); break; case 2: tavern::menu(); break; case 3: weaponShop::menu(); break; case 4: cout<<"Òû íà÷àë îòëè÷íóþ äðàêó íà óëèöå\n"; street::menu(); break; } } } //ïîêóïêà îðóæèÿ namespace weaponShop { void menu(void) { string options[]= {"Êóïèòü êèíæàë èíõðóñòèðîâàííûé äðàãîöåííûìè êàìíÿìè çà 300", "Êóïèòü êðåìíåâûé ìóøêåò çà 300 ", "Êóïèòü ñòàíäàðòíóþ áîåâóþ ñàáëþ çà 100 ", "Óéòèèç ìàãàçèíà."}; int userResponse=::menu(options,4); switch(userResponse) { case 1: cout<<"Òû êóïèë êèíæàë" <<"è ñïðÿòàë åãî â êàðìàí\n" <<"óïëàòèâ êîñòëÿâîìó ìóæ÷èíå " <<"çà ïðèëàâêîì\n"; menu(); break; case 2: cout<<"Çàïëàòèâ çàìóøêåò," <<"òû ñðàçó îöåíèë åãî." <<"Îí ïðåâîñõîäíî äåéñòâóåò !!!\n"; menu(); break; case 3: cout<<"Âçìàõíóâ ñàáëåé ïàðó ðàç òû ïîíèìàåøü\n" <<"÷òî îíà íå ñòîèò" <<"ïîòðà÷åííîãî çîëîòà\n"; menu(); break; case 4: street::menu(); break; } } } // íà÷àëî èãðû int main(void) { cout<<"Òâîé êîðàáûëü êðîâàâûé âåòåð âîøîë â äîêè" <<"Òû ñîøîë ñ\n" <<"êîðîáëÿ è ñòîèøü íà ïðè÷àëåþ\n\n"; wharf::menu(); return 0; }
Code // pirateTawn.h #include <iostream> #include <string> #include "MenuUtility.h" using namespace std; //îáÿâëåíèÿ ôóíêöèé namespace street { void menu(void); } namespace weaponShop { void menu(void); } namespace wharf { void menu(void); } namespace tavern { void menu(void); } Code // MenuUtility.h #include <iostream> #include <string> using namespace std; namespace menuNamespace { int menu(string* strArray,int size); }
Я белый и пушистый но имею когти и зубы
Сообщение отредактировал redinard - Вторник, 25 Октября 2011, 18:06 |
|
| |
0x90 | Дата: Вторник, 25 Октября 2011, 17:45 | Сообщение # 18 |
участник
Сейчас нет на сайте
| Нельзя эти крякозябры заменить чем-нибудь более вменяемым? И что значит "ещё один код на ваше обозрение"? Там ошибка, или просто так, чтобы завидовали, решил показать?
|
|
| |
redinard | Дата: Вторник, 25 Октября 2011, 17:56 | Сообщение # 19 |
постоянный участник
Сейчас нет на сайте
| Логично что там ошибка,я бы просто так код бы не выкладывал,а эти кракозябли это русский текст,я не виноват что сайт его не понимает(хотя в одном из выложеных мной кодов он понял),но они то собственно и не мишают ... Добавлено (25.10.2011, 17:56) --------------------------------------------- а конкретнее компилятор ругается на : Quote using menuNamespace::menu;
Я белый и пушистый но имею когти и зубы
|
|
| |
0x90 | Дата: Вторник, 25 Октября 2011, 18:02 | Сообщение # 20 |
участник
Сейчас нет на сайте
| Твой хедер наз-ся pitateTawn.h, а подключаешь ты pirateTown.h. Это единственная ошибка в коде.
|
|
| |
|