C++클래스 를 통 해 콘 솔 탐식 뱀 실현

13613 단어 C++탐식 사
본 논문 의 사례 는 C++콘 솔 에서 뱀 을 게 걸 스 럽 게 먹 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
c++를 처음 배 웠 으 니 이제 막 종 류 를 배 운 셈 치자.뱀 을 게 걸 스 럽 게 써 서 놀아 라.
현재 헤더 파일 입 니 다.

#pragma once
#ifndef SNACK_H
#define SNACK_H
 
#define Frame_X 5//       
#define Frame_Y 5//       
#define Frame_width 50//    
#define Frame_height 25//    
 
struct point//     
{
 int x[100]; //     ,  x[0]        ,x[N-1]        
 int y[100]; //     ,  y[0]        ,y[N-1]        
};
struct Food//    
{
 int x;
 int y;
};
 
 
class snack
{
public:
 snack();
 void init_snack(point *snake);//    
 void gotoxy(int x, int y);//    
 void begin_view();//  
 void frame();//         
 void menu(point *snake,Food *food);//      
 void print_snack(point *snake);//   
 void move(point *snake);//   
 void get_food(point *snake,Food *food);//      
 void eating(point *snake,Food *food);//   
 bool die(point *snake);//       
 
 void start_game();//   
 void end_game();//    
 
private:
 int length;//   
 int score;//  
 int account;//       
 int difficulty;//   
 int stage;//  
 int life;//   
 
};
 
#endif
주요 cpp

#include"stdafx.h"
#include"snack.h"
#include<Windows.h>
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<conio.h>
 
using std::cout;
using std::cin;
using std::endl;
 
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
/*************    ************/
#define key_number 11//    
#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) 
enum keyboard { up_, down_, left_, right_ ,w_,s_,a_,d_,y_,n_,esc_,other_};
int keyboard_list[] = {VK_UP,VK_DOWN,VK_LEFT,VK_RIGHT,'W','S','A','D','Y','N',VK_ESCAPE};
keyboard keyboardarray[] = { up_,down_,left_,right_,w_,s_,a_,d_,y_,n_,esc_,other_ };
keyboard get_the_key()
{
 for (int i = 0; i < key_number; i++)
 {
 if (KEYDOWN(keyboard_list[i]))
 return keyboardarray[i];
 }
 return keyboardarray[key_number];
}
 
 
int a[2];//      
 
snack::snack()
{
 length = 3;
 score = 0;
 account = 0;
 difficulty = 1;
 stage = 1;
 life = 3;
}
 
void snack::init_snack(point *snake)
{
 snake->x[0] = Frame_X + 2;  //        
 snake->y[0] = Frame_Y + Frame_height / 2; //        
 for (int i = 1; i < length; i++)/*       、      */
 {
 snake->x[i] = snake->x[i - 1] + 2;
 snake->y[i] = snake->y[i - 1];
 }
}
 
void snack::gotoxy(int x,int y)
{ 
 COORD pos;
 pos.X = x;
 pos.Y = y;
 SetConsoleCursorPosition(hOut, pos);
}
 
void snack::begin_view()
{
 SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
 cout << "



"; cout << " **** * * * **** * *
"; cout << " *   * ** * * * * * *
"; cout << " * * * * *** * * *
"; cout << "  *** * * * * * * **
"; cout << "     * * * * * * * * *
"; cout << "       * * * * ***** * * *
"; cout << " *    * * ** * * *   * * *
"; cout << " **** * * ** **   **** * *
"; SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY); cout << "



"; cout << " /^\\/^\\ "<<endl; cout << " _|__| O|"<<endl; cout << " \\/ /~ \_/ \\ "<<endl; cout << " \\____|__________/ \\ "<<endl; cout << " \\_______ \\ "<<endl; cout << " `\\ \\ \\ "<<endl; cout << " | | \\ "<<endl; cout << " / / \\ "<<endl; cout << " / / \\\\ "<<endl; cout << " / / \\ \\ "<<endl; cout << " / / \\ \\ "<<endl; cout << " / / _----_ \\ \\ "<<endl; cout << " / / _-~ ~-_ | |"<<endl; cout << " ( ( _-~ _--_ ~-_ _/ |"<<endl; cout << " \\ ~-____-~ _-~ ~-_ ~-_-~ /"<<endl; cout << " ~-_ _-~ ~-_ _-~"<<endl; cout << " ~--______-~ ~-___-~"<<endl; } void snack::frame() { SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY); // gotoxy(Frame_X, Frame_Y); cout << "┏"; for (int i = 0; i < Frame_width/2-2; i++) cout << "━"; cout << "┓"; // gotoxy(Frame_X, Frame_Y + Frame_height); cout << "┗"; for (int i = 0; i < Frame_width/2-2; i++) cout << "━"; cout << "┛"; // for (int i = 0; i < Frame_height-1; i++) { gotoxy(Frame_X, Frame_Y + 1 + i); cout << "┃"; gotoxy(Frame_X+Frame_width-2, Frame_Y + 1 + i); cout << "┃"; } SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY); gotoxy(Frame_X + Frame_width + 3, Frame_Y + 1); cout << " : WSAD "; gotoxy(Frame_X + Frame_width + 3, Frame_Y + 3); cout << " "; gotoxy(Frame_X + Frame_width + 3, Frame_Y + 5); cout << " ESC "; } void snack::menu(point *snake,Food *food) { gotoxy(Frame_X + 3, Frame_Y - 2); cout << " :" << score; gotoxy(Frame_X + Frame_width -11, Frame_Y - 2); cout << " :" << life; gotoxy(Frame_X + Frame_width - 30, Frame_Y - 2); cout << " :" << stage; /*gotoxy(Frame_X + Frame_width + 3, Frame_Y + 5); cout << " :" << food->x; gotoxy(Frame_X + Frame_width + 3, Frame_Y + 7); cout << " :" << food->y; gotoxy(Frame_X + Frame_width + 3, Frame_Y + 9); cout << "X: " << snake->x[length - 1]; gotoxy(Frame_X + Frame_width + 3, Frame_Y + 11); cout << "Y: " << snake->y[length - 1];*/ } void snack::print_snack(point *snake) { for (int i = 0; i<length; i++) { gotoxy(snake->x[i], snake->y[i]); if (i == 0) cout << "○";// else if (i == length - 1) cout << "¤";// else cout << "◎";// } } void snack::move(point *snake) { gotoxy(snake->x[0], snake->y[0]); cout << " ";// for (int i = 1; i < length ; i++)/* */ { snake->x[i - 1] = snake->x[i]; snake->y[i - 1] = snake->y[i]; } } void snack::get_food(point *snake,Food *food) { int i, j; srand(static_cast<unsigned int>(time(0))); SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY); /* :1. 2. */ while (1) { j = 0; food->x = Frame_X + 2 * (rand() % (Frame_width / 2 - 2)) + 2;// food->y = Frame_Y + rand() % (Frame_height - 2) + 1;// for (i = 0; i<length; i++) {/* , , ; , */ if (food->x == snake->x[i] && food->y == snake->y[i]) { j = 1; break; } } if (i == length) { gotoxy(food->x, food->y); cout << "⊙"; break; } else continue; } SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);// } void snack::eating(point *snake,Food *food) { if (snake->x[length - 1] == food->x&&snake->y[length - 1] == food->y) { length++; for (int i = length - 1; i > 0; i--)/* , */ { snake->x[i] = snake->x[i - 1]; snake->y[i] = snake->y[i - 1]; } snake->x[0] = a[0];// snake->y[0] = a[1];// get_food(snake, food); account++; score+=difficulty*10;// if (account % 5 == 0) { difficulty++; stage++; } } } bool snack::die(point *snake) { for (int i = 0; i < length-1; i++) { if (snake->x[length - 1] == snake->x[i] && snake->y[length - 1] == snake->y[i]) return true; } if (snake->x[length - 1] == Frame_X || snake->y[length - 1] == Frame_Y || snake->x[length - 1] == Frame_X + Frame_width - 2 || snake->y[length - 1] == Frame_Y + Frame_height - 1) return true; return false; } void snack::start_game() { // CONSOLE_CURSOR_INFO Cursorlnfo; GetConsoleCursorInfo(hOut, &Cursorlnfo);// Cursorlnfo.bVisible = false;// SetConsoleCursorInfo(hOut, &Cursorlnfo);// system("mode con cols=100 lines=40");// point s, *snake = &s; // Food f, *food = &f; // keyboard key_state, Key; keyboard temp = right_; int j = 0; char ch=77; begin_view(); gotoxy(12, 34); cout << " ......"; while(!_kbhit()) { } system("cls"); frame(); init_snack(snake); get_food(snake,food); while (1) { j = 0; menu(snake,food); a[0] = snake->x[0]; a[1] = snake->y[0]; key_state = get_the_key(); if (key_state == temp)// { j = 1; Sleep(20); } if(key_state!=other_) temp = key_state; switch (temp) { case up_: case w_: move(snake); snake->y[length - 1] -= 1; break; case down_: case s_: move(snake); snake->y[length - 1] += 1; break; case left_: case a_: move(snake); snake->x[length - 1] -= 2; break; case right_: case d_: move(snake); snake->x[length - 1] += 2; break; case esc_: end_game(); break; } eating(snake, food); print_snack(snake); if (die(snake)) { life--; if (life == 0) end_game(); else { length = 3; start_game(); } } if (j == 0) { if (difficulty < 10) Sleep(200 - difficulty * 20); else Sleep(10); } else Sleep(10); } } void snack::end_game() { system("CLS"); system("color 0D"); cout << "
  *** * ** ** *********"; cout << "
 *  * * ** ** * "; cout << "
*    *** * * * * * "; cout << "
*    * * * * * * ******** "; cout << "
*  *** * * * * * * "; cout << "
*   * ***** * * * * "; cout << "
  *  * * * * * * * "; cout << "
   **  ** ** * * * *********"; cout << "





"; cout << "
*** ** ** ********** ****** "; cout << "
*   *   *   *   *     * * "; cout << "
* * * * * * * "; cout << "
* * * * ******** ****** "; cout << "
* * * * * * * "; cout << "
* * * * * * * "; cout << "
* * *** * * ** "; cout << "
*** * ********** * ** "; SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_INTENSITY); gotoxy(Frame_X + Frame_width / 2, 27); cout << " :" << score; Sleep(200); exit(0); }
그리고 main 함수.

#include "stdafx.h"
#include"snack.h"
 
int main()
{ 
 snack a;
 a.start_game();
 return 0;
}
C++미니 게임 에 대한 더 많은 하 이 라이트 내용 은 주 제 를 클릭 하 십시오<C++클래식 미니 게임>학습 이해
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기