diff --git a/Prototype-master/.Makefile.swp b/Prototype-master/.Makefile.swp new file mode 100644 index 0000000..114e76b Binary files /dev/null and b/Prototype-master/.Makefile.swp differ diff --git "a/Prototype-master/Curses \354\236\220\353\243\214.pdf" "b/Prototype-master/Curses \354\236\220\353\243\214.pdf" new file mode 100644 index 0000000..fae0380 Binary files /dev/null and "b/Prototype-master/Curses \354\236\220\353\243\214.pdf" differ diff --git a/Prototype-master/Makefile b/Prototype-master/Makefile new file mode 100644 index 0000000..cd2351e --- /dev/null +++ b/Prototype-master/Makefile @@ -0,0 +1,12 @@ +Prototype.exe: menu.o TajaGame.o RainGame.o main.o + g++ -o Prototype.exe menu.o main.o TajaGame.o RainGame.o -lncurses -lpthread +main.o : main.cpp + g++ -c -o main.o main.cpp -lncurses -lpthread +menu.o : menu.cpp + g++ -c -o menu.o menu.cpp -lncurses -lpthread +TajaGame.o : TajaGame.cpp + g++ -c -o TajaGame.o TajaGame.cpp -lncurses -lpthread +RainGame.o : RainGame.cpp + g++ -c -o RainGame.o RainGame.cpp -lncurses -lpthread +clean : + rm *.o Prototype.exe diff --git a/Prototype-master/Prototype.exe b/Prototype-master/Prototype.exe new file mode 100755 index 0000000..c1991cf Binary files /dev/null and b/Prototype-master/Prototype.exe differ diff --git a/Prototype-master/README.md b/Prototype-master/README.md new file mode 100644 index 0000000..2a6e283 --- /dev/null +++ b/Prototype-master/README.md @@ -0,0 +1,117 @@ +![title](https://user-images.githubusercontent.com/55469709/68226234-0ecffd80-0035-11ea-9676-7d0e7f96227e.jpg) + + +!! master 브런치에 바로 PR하지말고 test or rain_test 브런치에 PR하세요!! + +!! master 브런치는 test다 끝난 완성본만 + +--------------------------------------------------------------------------------------------------------------------------------------- + +__make 명령어 사용 개발__ + +소스파일 추가시 makefile 을 vim으로 열어서 각자 추가 + +make 명령어 사용시 Prototype.exe 파일 만들어지니까 + __./Prototype.exe__ 으로 프로그램 실행 + +--------------------------------------------------------------------------------------------------------------------------------------- + + +__타자연습 게임__ + +기록 / 이어하기 시스템(LOGIN) + +모드 ( 게임모드 / 타자 속도 측정 모드 ) + + +__산성비 모드__ + + 단계별로 텍스트 파일에 문장을 저장하고 그걸 읽어와서 작동 + + +단어를 입력해야만 HP가 깎이지않음 + +배경음악 on , 문자열을 시간 내에 입력 성공여부에 따라 이펙트 소리 & 효과 on + +게임모드는 단어(혹은 문장)이 내려오는 게임으로 바운더리에 충돌하기 전에< + + +__타자 속도 측정 모드__ + +타자 속도를 측정하는 것 측정하는 방식은 기본 타자 연습과 똑같거나 최대한 비슷하게 구현 + +기록하는 모드 구현 + + + +================================산성비 모드 관련=================================== +- 단어가 바운더리보다 아래로 떨어질 때 HP 깎이는 것 구현 + +- 산성비단어 출력 구현 + +- 입력 받고 백스테이스로 지우는 것 까지는 구현 + -> 리스트에서 단어지우는 함수 만들어봤는데 지워지지가 않음. + +=================================경진수정======================================== +!!처음 내려오는 단어빼고 18행 에서 단어들이 사라짐. 원래 20행에서 사라져야하는데ㅎ + +!!void Blank_OutputWord() 사용하면 단어 입력시 내려오는 단어들이 안보임. + -> 지우고 실행해보면 입력하고 내려오는거 동시에 볼 수 있는데 단어들이 겹쳐서 내려옴. + + + +=================================1119요한수정==================================== +1. 리스트에서 단어지우는 함수 만들어봤는데 지워지지가 않음 +>> 수정함 단어 잘지워지만 바로 지워지지않고 usleep()후에 업데이트 된다, 이는 usleep()상태일 때는 단어 출력 스레드에 접근이 불가능하기 때문임 +!!대책 필요할 듯 +++단어 지워질 때 마다 스코어 +10 + +2. void Blank_OutputWord() 사용하면 단어 입력시 내려오는 단어들이 안보임. + -> 지우고 실행해보면 입력하고 내려오는거 동시에 볼 수 있는데 단어들이 겹쳐서 내려옴. +>> 두 문제 다 해결 잘 출력 됨 + +3. 처음 내려오는 단어빼고 18행 에서 단어들이 사라짐. 원래 20행에서 사라져야하는데 +>> 잘 사라지게 바꿈 + + +=================================1120요한수정==================================== +1. 각 스테이지 단어 정의 + +2. 게임오버 화면 출력 함수 구현 +>> 너무 초라해서 업데이트 필요함 + +=================================1120준형수정=================================== +1. 타자모드에서 색 입힘 +2. 엔터를 눌러야 오타를 확인 할 수 있으므로 바로바로 오타를 확인 할 수 있게 getch()함수 구현 예정 + +=================================1128경진수정==================================== +1. 스테이지 레벨 구성 완료 + +2. 게임 완료 화면 구현 +>> 차후 수정 + +!!life가 바로 줄어들지 않음!!! + +이제 슬슬 마무리 단계 구현해야할듯 +화면 게임오버랑 게임완료 화면 꾸미기 + +=================================1129요한확인==================================== + +- 요한 >> 12/5 이후에 게임오버 화면 수정 / life 줄어들지않는 문제 보완 + +- 경진 >> 점수 기록 구현 / 기록보기 함수와 연동 + ++++ 단어를 입력해도 바로 사라지지않는 문제도 해결 필요 + +=================================1202경진======================================== +산성비 통합 작업은 완료. +통합 과정에서 core dump 오류 자주 발생해서 오류수정은 했으나 + +다른 중요한 부분(변수, 함수) 수정하면 다시 발생할 수 있으니 __조심!!__ + +기본 타자 모드 틀린 글자 색깔 표시 기능은 통합 안했음. + +마지막으로 자잘한 UI 수정 필요. + +슬슬 마무리 작업 시작해야할듯 + +================================1205준형========================================= +타자 입력 cpp파일 브랜치에 업로드 확인 바람. +오류시 알려주시면 감사하겠습니다. diff --git a/Prototype-master/RainGame.cpp b/Prototype-master/RainGame.cpp new file mode 100644 index 0000000..5142bd9 --- /dev/null +++ b/Prototype-master/RainGame.cpp @@ -0,0 +1,455 @@ +#include "RainGame.hpp" + +list::iterator Iter; +list WordList; + +void Rain::Game_Start() { + + pthread_t pthread1 = 0; + pthread_t pthread2 = 0; + pthread_t pthread3 = 0; + Rain *arg = new Rain(); + srand(time(NULL)); + clear(); + initscr(); // curses모드 시작!! + + // score print + move(1, 0); + addstr("score: "); + sprintf(score_Bar, "%d", score); + addstr(score_Bar); + + // hp print + move(0, 0); + addstr("life: "); + sprintf(hp_Bar, "%d", hp); + addstr(hp_Bar); + refresh(); + + // Inventory 미구현 + // move(2, 0); + // addstr("Inventory: "); + // refresh(); + + refresh(); + usleep(500000); + + // enter_position + Draw(21, 0, + "--------------------------------------------------------------------" + "------------"); + Draw(22, 20, enter_Bar); + Draw(23, 0, + "--------------------------------------------------------------------" + "------------"); + usleep(500000); + + // Stage1 START + move(0, 74); + addstr("STAGE1"); + move(22, 36); + + usleep(5); + pthread_create(&pthread1, NULL, (THREADFUNCPTR)&Rain::Game_Board_1, arg); + + while (hp > 0) { + + enter_num = 0; + + for (enter_num = 0; enter_num < 30;) { + input = getch(); + + if (input == '\n') { //개행 입력 받았을 때 + + enter[enter_num] = '\0'; //개행 문자 널로 바꾸기 + FindWords(enter); + + for (int i = 0; i < 30; i++) { + enter[i] = '\0'; + } + + move(22, 36); + addstr(" "); // enter하는 곳 비우기 + Draw(22, 20, enter_Bar); + move(22, 36); + + break; + } else if (input == 127) { //백스페이스 눌렀을 때 + enter[enter_num] = '\0'; //개행 문자 널로 바꾸기 + + enter[--enter_num] = '\0'; + move(22, 36); + addstr(" "); // enter하는 곳 비우기 + move(22, 36); + addstr(enter); + } else { //문자 입력할 때 + enter[enter_num++] = input; + move(22, 36); + addstr(enter); + } + + refresh(); + } + + if (score >= 20) { + pthread_cancel(pthread1); //현재 스레드 종료 + for (Iter = WordList.begin(); Iter != WordList.end();) { + Iter = WordList.erase(Iter); + } + break; + } + } + + // Stage2 START + + move(0, 74); + addstr("STAGE2"); + move(22, 36); + + pthread_create(&pthread2, NULL, (THREADFUNCPTR)&Rain::Game_Board_2, arg); + + while (hp > 0) { + + enter_num = 0; + + for (enter_num = 0; enter_num < 30;) { + input = getch(); + + if (input == '\n') { //개행 입력 받았을 때 + + enter[enter_num] = '\0'; //개행 문자 널로 바꾸기 + FindWords(enter); + + for (int i = 0; i < 30; i++) { + enter[i] = '\0'; + } + + move(22, 36); + addstr(" "); // enter하는 곳 비우기 + Draw(22, 20, enter_Bar); + move(22, 36); + + break; + } else if (input == 127) { //백스페이스 눌렀을 때 + enter[enter_num] = '\0'; //개행 문자 널로 바꾸기 + + enter[--enter_num] = '\0'; + move(22, 36); + addstr(" "); // enter하는 곳 비우기 + move(22, 36); + addstr(enter); + } else { //문자 입력할 때 + enter[enter_num++] = input; + move(22, 36); + addstr(enter); + } + + refresh(); + } + + if (score >= 50) { + pthread_cancel(pthread2); //현재 스레드 종료 + for (Iter = WordList.begin(); Iter != WordList.end();) { + Iter = WordList.erase(Iter); + } + break; + } + } + + // Stage3 START + + move(0, 74); + addstr("STAGE3"); + move(22, 36); + + pthread_create(&pthread3, NULL, (THREADFUNCPTR)&Rain::Game_Board_3, arg); + + while (hp > 0) { + + enter_num = 0; + + for (enter_num = 0; enter_num < 30;) { + input = getch(); + + if (input == '\n') { //개행 입력 받았을 때 + + enter[enter_num] = '\0'; //개행 문자 널로 바꾸기 + FindWords(enter); + + for (int i = 0; i < 30; i++) { + enter[i] = '\0'; + } + + move(22, 36); + addstr(" "); // enter하는 곳 비우기 + Draw(22, 20, enter_Bar); + move(22, 36); + + break; + } else if (input == 127) { //백스페이스 눌렀을 때 + enter[enter_num] = '\0'; //개행 문자 널로 바꾸기 + + enter[--enter_num] = '\0'; + move(22, 36); + addstr(" "); // enter하는 곳 비우기 + move(22, 36); + addstr(enter); + } else { //문자 입력할 때 + enter[enter_num++] = input; + move(22, 36); + addstr(enter); + } + + refresh(); + } + + if (score >= 70) { + pthread_cancel(pthread3); //현재 스레드 종료 + for (Iter = WordList.begin(); Iter != WordList.end();) { + Iter = WordList.erase(Iter); + } + break; + } + } + + GameComplete(); + sleep(3); + endwin(); + exit(0); +} + +void *Rain::Game_Board_1(void *) { + pthread_t tid1 = 0; + while (hp > 0) { + CreateList_1(); + + Blank_OutputWord(); + //문자열 출력 + for (Iter = WordList.begin(); Iter != WordList.end(); ++Iter) { + // row가 22이하일 때만 출력한다 + if ((**Iter).row < 22) { + Draw((**Iter).row, (**Iter).col, (**Iter).str); + } + if ((**Iter).row > 22) { + pthread_mutex_lock(&lock); + hp--; + + if (hp == 0) { + GameOver(); + sleep(5); + endwin(); + exit(0); + } + WordList.pop_front(); + pthread_mutex_unlock(&lock); + + move(0, 0); + addstr("life: "); + sprintf(hp_Bar, "%d", hp); + addstr(hp_Bar); + refresh(); + + Iter = WordList.begin(); + // WordList를 pop()해줌에 따라 인덱스 값이 변경 됐으므로 + // 다시 시작 + } + } + move(22, 36); + } +} + +void *Rain::Game_Board_2(void *) { + + while (hp > 0) { + CreateList_2(); + + Blank_OutputWord(); + //문자열 출력 + for (Iter = WordList.begin(); Iter != WordList.end(); ++Iter) { + // row가 22이하일 때만 출력한다 + if ((**Iter).row < 22) { + Draw((**Iter).row, (**Iter).col, (**Iter).str); + } + if ((**Iter).row > 22) { + pthread_mutex_lock(&lock); + hp--; + + if (hp == 0) { + GameOver(); + sleep(5); + endwin(); + exit(0); + } + WordList.pop_front(); + pthread_mutex_unlock(&lock); + + move(0, 0); + addstr("life: "); + sprintf(hp_Bar, "%d", hp); + addstr(hp_Bar); + refresh(); + + Iter = WordList.begin(); + // WordList를 pop()해줌에 따라 인덱스 값이 변경 됐으므로 + // 다시 시작 + } + } + move(22, 36); + } +} + +void *Rain::Game_Board_3(void *) { + + while (hp > 0) { + CreateList_3(); + + Blank_OutputWord(); + //문자열 출력 + for (Iter = WordList.begin(); Iter != WordList.end(); ++Iter) { + // row가 22이하일 때만 출력한다 + if ((**Iter).row < 22) { + Draw((**Iter).row, (**Iter).col, (**Iter).str); + } + if ((**Iter).row > 22) { + pthread_mutex_lock(&lock); + hp--; + + if (hp == 0) { + GameOver(); + sleep(5); + endwin(); + exit(0); + } + WordList.pop_front(); + pthread_mutex_unlock(&lock); + + move(0, 0); + addstr("life: "); + sprintf(hp_Bar, "%d", hp); + addstr(hp_Bar); + refresh(); + + Iter = WordList.begin(); + // WordList를 pop()해줌에 따라 인덱스 값이 변경 됐으므로 + // 다시 시작 + } + } + move(22, 36); + } +} +//입력한 단어가 화면에 있는 단어와 일치하면 제거하고 스코어 +10 +void Rain::FindWords(char *str) { + for (Iter = WordList.begin(); Iter != WordList.end(); ++Iter) { + if (!strcmp((**Iter).str, str)) { + WordList.erase(Iter); + Iter = WordList.begin(); + score += 10; //점수 증가 + move(1, 0); + addstr("score: "); + sprintf(score_Bar, "%d", score); + addstr(score_Bar); + refresh(); + return; + } + } +} + +void Rain::Draw(int row, int col, char *str) { + move(row, col); + addstr(str); + refresh(); +} + +// WordList에 있는 모든 단어들을 2칸씩 내린다 +void Rain::Down_Words() { + for (Iter = WordList.begin(); Iter != WordList.end(); ++Iter) { + (**Iter).row += 2; + } +} + +// List를 만든다 , rand()는 현재 시간을 기반으로 한 함수이기때문에 1초마다 +// 업데이트된다 +void Rain::CreateList_1() { + WordNodePointer word; + srand((int)time(NULL)); + word = CreateWord(Return_STAGE1()); + WordList.push_back(word); + usleep(1700000); + Down_Words(); +} +void Rain::CreateList_2() { + WordNodePointer word; + srand((int)time(NULL)); + word = CreateWord(Return_STAGE2()); + WordList.push_back(word); + usleep(1700000); + Down_Words(); +} +void Rain::CreateList_3() { + WordNodePointer word; + srand((int)time(NULL)); + word = CreateWord(Return_STAGE3()); + WordList.push_back(word); + usleep(1500000); + Down_Words(); +} + +//노드의 동적할당 및 초기화 +WordNodePointer Rain::Initnode(void) { + WordNodePointer word = new WordNode; + + word->col = 0; + word->row = 0; + strcpy(word->str, ""); + return word; +} +// str문자열을 담은 노드를 반환 +WordNodePointer Rain::CreateWord(const char *str) { + srand(time(NULL)); + WordNodePointer word = Initnode(); + strcpy(word->str, str); + word->row = 2; + word->col = rand() % 40 + 10; + + return word; //노드 반환 +} + +const char *Rain::Return_STAGE1() { + srand((int)time(NULL)); + int index = rand() % 12; + return STAGE1[index]; +} +const char *Rain::Return_STAGE2() { + srand((int)time(NULL)); + int index = rand() % 12; + return STAGE2[index]; +} +const char *Rain::Return_STAGE3() { + srand((int)time(NULL)); + int index = rand() % 12; + return STAGE3[index]; +} +void Blank_OutputWord() { + for (int i = 2; i < 21; i++) { + move(i, 10); + addstr(" "); + } +} + +void Rain::GameComplete(){ + clear(); + Blank_OutputWord(); + move(11, 33); + addstr("YOU DID IT!!!!"); + refresh(); + return; +} +void Rain::GameOver() +{ + clear(); + Blank_OutputWord(); + move(11,33); + addstr("GameOver..."); + refresh(); + return ; +} diff --git a/Prototype-master/RainGame.hpp b/Prototype-master/RainGame.hpp new file mode 100644 index 0000000..c25c0ce --- /dev/null +++ b/Prototype-master/RainGame.hpp @@ -0,0 +1,121 @@ +#ifndef __TEST_H__ +#define __TEST_H__ +#define WORD_MAX 50 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; + +typedef struct WordNode* WordNodePointer; +typedef struct WordNode +{ + int row, col; + char str[WORD_MAX]; + WordNodePointer up, down; + +}WordNode; + +class Rain { + private: + + char enter[30] = {0}; + int enter_num; + int hp = 10; + char hp_Bar[10]; + char score_Bar[10]; + char enter_Bar[20] = " | Enter | : "; + char stage[10] = "STAGE"; + char stageName[15] = "숲"; + int score = 0; + int input; + + pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; + + public: + + void FindWords(char *str); + void *Game_Board_1(void *); + void *Game_Board_2(void *); + void *Game_Board_3(void *); + void Game_Start(); + void Draw(int row, int col, char *str); + void Print_Words(); + char **Get_Words(); + void Down_Words(); + WordNodePointer Initnode(void); + WordNodePointer CreateWord(const char *str); + void CreateList_1(); + void CreateList_2(); + void CreateList_3(); + void GameOver(); + void GameComplete(); + const char *Return_STAGE1(); + const char *Return_STAGE2(); + const char *Return_STAGE3(); + + // Fruit + const char *STAGE1[20] = {"Banana", "Mango", "Apple", "Watermelon", + "Orange", "Strawberry", "Durian", "Grape", + "Citrus", "Mangosteen", "Plum", "Peach", + "Pineapple", "Coconnut", "Sugarcane", "Blueberry", + "Pear", "flg", "Persimmon", "Pomegranate"}; + // Music + const char *STAGE2[30] = { + "You And I", "Reality", "Workerholic", "Blueming", + "Mirotic", "Yes or Yes", "Heartshaker", "IDOL", + "Travel", "Good Day", "Attention", "All falls down", + "Despacito", "Shape of you", "DINOSAUR", "UmpahUmpah", + "Viva La Vida", "What the hell", "Alone", "2002", + "Lost Stars", "Love$ick", "7rings", "Speechless", + "Handclap", "We all lie", "The Ocean", "Move Like Jagger", + "Reminiscence", "HymnForTheWeekend"}; + // Disciplines + const char *STAGE3[30] = {"Mathemtics", + "Physics", + "Quantum Mechanics", + "Apparel study", + "Religious studies", + "Food and Nutrition", + "Quantum Physics", + "Linguistics", + "Material engineering", + "Chemistry", + "Science of law", + "Computer Science", + "Philosophy", + "Economics", + "Urban engineering", + "literature", + "Psychology", + "Korean Medicine", + "Earth science", + "Pedagogy Education", + "Astronomy", + "Medicine", + "Architecture", + "Biology", + "Archaeology", + "Mechanical engineering", + "Dentistry", + "Sociology", + "Humanities", + "Natural science"}; +}; +typedef void *(*THREADFUNCPTR)(void *); + + + +void Blank_OutputWord(); + + +#endif diff --git a/Prototype-master/RainGame.o b/Prototype-master/RainGame.o new file mode 100644 index 0000000..b8ce5b2 Binary files /dev/null and b/Prototype-master/RainGame.o differ diff --git a/Prototype-master/TajaGame.cpp b/Prototype-master/TajaGame.cpp new file mode 100644 index 0000000..8e8a968 --- /dev/null +++ b/Prototype-master/TajaGame.cpp @@ -0,0 +1,215 @@ +#include "TajaGame.h" + +void Game::Print_Result() +{ + + cout<spd=(float)total_typenum / type_during_Time*60; + user->accuracy=accuarcy; + + fd=open(SCOREFILE, O_CREAT | O_RDWR | O_APPEND, 0644); + if(fd==-1) { + perror("open() error!"); + exit(-1); + } + + w_Size=write(fd, (UserScore*)user, sizeof(UserScore)); + if(w_Size==-1) { + perror("write() error!"); + exit(-2); + } + + close(fd); + + //added func finished + + err_typenum =0; + total_typenum =0; + accuarcy =0.0; + while(Text_Mode.size() !=0) + Text_Mode.pop_back(); + cout<<"dongdol"<" << endl << endl; + cout << "Speed\t\t" << "Accuracy \t\t" << endl; //UI + + fd=open(SCOREFILE, O_CREAT | O_RDONLY, 0644); + if(fd==-1) { + perror("open() error!"); + exit(-1); + } + + UserScore *user=new UserScore; + + r_Size=1; + + while(1) { + r_Size=read(fd, (UserScore*)user, sizeof(UserScore)); + if(r_Size==0) + break; + cout << user->spd << "\t\t"; + cout << user->accuracy << "\t\t"; + cout << endl; + + } + + close(fd); + cin >> r_Size; +} +// added func finished + +void Game::Remove_Enter(char put_String[], int len) +{ + put_String[len - 1] = '\0'; +} + + +int Game::Return_ErrTypeNum(char Buf[], char put_String[], int str_Size) { + int err = 0; + for (int i = 0; i < str_Size; i++) { + if (Buf[i] != put_String[i]) + err++; + } + + return err; +} + +/*어떤 텍스트로 타자연습할까요~?*/ +char* Game::Print_TextList(int select) +{ + string cmp; + string get; + char *SelectedFile; + cout<<"[타자연습 목록]"<compare(SelectedFile) ==0) + return SelectedFile; + else + break; + } + } + +} + +int Game::basicgame() +{ + /*타자연습 언어 선택*/ + + while(1){ + system("clear"); + cout<<"어떤 언어로 타자연습을 진행하시겠습니까? 1. 영어 2. 한글"<>select; + if(select ==SELECT_ENGLISH) + { + Text_Mode = English; + cout<<"영어를 선택하셨습니다."< +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +#define SIZE_READ_TEXT_ENG 70 + 3 +#define SIZE_READ_TEXT_HNG 101 + +#define SELECT_ENGLISH 1 +#define SELECT_HANGUL 2 + +#define SCOREFILE "./userscore.dat" // added + +class Game { + + private: + int select =0; + char pathName[20] ={'\0',}; + char put_String_E[SIZE_READ_TEXT_ENG] = {'\0', }; + char Buf_E[SIZE_READ_TEXT_ENG] = { '\0',}; + char err_Type_E[SIZE_READ_TEXT_ENG] = { '\0', }; + char put_String_H[SIZE_READ_TEXT_HNG] = {'\0',}; + char Buf_H[SIZE_READ_TEXT_HNG] = {'\0',}; + char err_Type_H[SIZE_READ_TEXT_HNG]={'\0',}; + int total_typenum = 0; //타이핑되는 총 글자수 입력 (공백 포함) + int err_typenum = 0; + float accuarcy = 0.0; + int type_start_Time; + int type_during_Time; + list English={"명언","명언2","명언3"}; + list Hangul={"이별택시","자화상"}; + list Text_Mode; + list::iterator iter; + + public: + int basicgame(); + int Return_ErrTypeNum(char Buf[], char put_String[], int str_Size); + void Remove_Enter(char put_String[], int len); + void Print_Result(); + char* Print_TextList(int select); + +}; + +// added part started + +static int fd; +static int w_Size; +static int r_Size; + +typedef struct UserScore { +// char userName[]="Cho"; + double spd; + double accuracy; +} UserScore; + +void readScore(); + +// added part finished + +#endif diff --git a/Prototype-master/TajaGame.o b/Prototype-master/TajaGame.o new file mode 100644 index 0000000..c518675 Binary files /dev/null and b/Prototype-master/TajaGame.o differ diff --git a/Prototype-master/main.cpp b/Prototype-master/main.cpp new file mode 100644 index 0000000..4f94388 --- /dev/null +++ b/Prototype-master/main.cpp @@ -0,0 +1,9 @@ +// version 1.0 + +#include "menu.h" + +int main() { + Menu menu; + menu.mainmenu(); + menu.help(); +} diff --git a/Prototype-master/main.o b/Prototype-master/main.o new file mode 100644 index 0000000..c7a1cfb Binary files /dev/null and b/Prototype-master/main.o differ diff --git a/Prototype-master/menu.cpp b/Prototype-master/menu.cpp new file mode 100644 index 0000000..6ded065 --- /dev/null +++ b/Prototype-master/menu.cpp @@ -0,0 +1,80 @@ +#include "menu.h" +#include "TajaGame.h" +#include "RainGame.hpp" +#include +#include +#include + +void Menu::mainmenu() + { + list WordList; + list::iterator Iter; + Menu menu; + Game game; + Rain rain; + system("clear"); //콘솔창 초기화 + cout << "\n\n\n\n\n\n\n\n\n\n\n\n"; + + cout << " TTTTTTT Y Y PPPP III N N GGG GGG A M M EEEEE "<< endl; + cout << " T Y Y P P I NN N G G A A M M M M E "<< endl; + cout << " T Y PPPP I N NN N G GGG G GGG A A M M M EEEEE "<< endl; + cout << " T Y P I N NN G G G G A AAA A M M E "<< endl; + cout << " T Y P III N N GGG GGG A A M M EEEEE "<>"); + cin >> menu.choice; + cin.get(); + + switch (menu.choice) { + case 1: + game.basicgame(); //기본 타자 연습 모드 + break; + case 2: + rain.Game_Start(); //산성비 모드 + break; + case 3: + cout << "기록보기함수 \n"; //구현해야함 + readScore(); + break; + case 4: + menu.help(); //예시 구현 + break; + case 5: + system("clear"); + return; //게임 종료 + break; + default: + break; + } + } +} + +void Menu::help() +{ + system("clear"); + cout << "타자연습게임입니다" << endl << endl; + + cout << "1.타자 연습 모드는 한글과 영어를 선택할 수 있습니다." << endl; + cout << "자신의 오타수와 속도를 확인할 수 있습니다." << endl; + cout << "게임 진행 중 틀린 글자는 다른 색상으로 표시됩니다!" + << endl << endl << endl; + cout << "2.산성비 모드에서는 내려오는 단어를 입력하면 점수가 상승합니다." + << endl; + cout << "특정 점수를 만족하면 다음 레벨로 진행됩니다. 영어로 진행됩니다." + << endl<