Игра Змейка. Shake. C++BUILDER6.0

о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о  Популярная игра Змейка! о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о

Простой и удобный интерфейс дает возможность насладится всем известной игрой Змейка. В архиве есть исходники программы на с++ builder и скомпилированый ехе файл. Управление производится с помощью стрелочек на клавиатуре компьютера. Скачиваем и играем)))

Часть кода программы:

//автор(с): Бабченко Александр
#ifndef _UNICODE
#define _UNICODE
#endif
#ifndef UNICODE
#define UNICODE
#endif
#ifndef min
#define min(a, b)  (((a) < (b)) ? (a) : (b))
#endif
#ifndef max
#define max(a, b)  (((a) > (b)) ? (a) : (b))
#endif
#include <windows.h>
#include <stdio.h>
#include <time.h>
#ifdef __BORLANDC__
#pragma hdrstop
#pragma warn -8027
#endif
#include "console.h"
#include "controls.h"

#define GAME_CMD_START   0
#define GAME_CMD_HELP    1
#define GAME_CMD_QUIT    2

#define STATE_G_MENU     0
#define STATE_G_PLAY     1
#define STATE_G_HELP     2

#define DELAY_START      150UL
#define SNAKE_LENGTH     77
#define SNAKE_LEVELS     7




class Snake: public xConsole {
private:
	DWORD            score;
	DWORD            delay;
	WORD             level;
	WORD             state;
	WORD             key_ctrl;
	SMALL_RECT       frect;
	COORD            obj_pos;
	WORD             obj_inc;
	xField           field;
	xMsgBox          msgbox;

	xButtonGroup<3>  buttons;
	slist<COORD>     snake;
public:
	Snake(void);
	virtual ~Snake();
private:
	virtual void OnCreate(void);
	virtual void OnMouseMove(const COORD&);
	virtual void OnMouseDown(UINT, const COORD&);
	virtual void OnMouseUp(const COORD&);
//	virtual void OnMouseWheel(int);
//	virtual void OnMouseDblDown(UINT, const COORD&);
	virtual void OnKeyDown(WORD);
	virtual void OnKeyUp(WORD);
	virtual void OnProcess(void);
private:
	void draw_play(void);
	void generate_pos(void);
	bool is_self_intersect(void);
	void put_bonus(void);
	void show_help(void);
	void draw_victory(void);
	void draw_pause(void);
};



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



Snake::Snake():xConsole(), 
               score(0UL),
               delay(0UL),
               level(0),
               state(STATE_G_MENU), 
               key_ctrl(0){

}


Snake::~Snake(){
	snake.clear();
	msgbox.destroy();
}



//событие возникает создание консольного буфера или присваивание текущего
void  Snake::OnCreate(void){
	SetConsoleTitleW(L"Змейка");
	srand((unsigned int)time(NULL));

	//добавляем дополнительный буфер для игрового поля
	if(Add() == ERROR_SUCCESS){
		setActiveNoVisible(1);
		setBufferSize(Width(), Height() / 9);
        
		SMALL_RECT rc = getWindowSize();
		rc.Bottom = Height() - 1;
		setWindowSize(rc, TRUE);
       
		VisibleCaret(FALSE);
	}

	//рисуем меню игры
	setActiveNoVisible(0);
	setBufferSize(Width(), Height() / 11);
  
	SMALL_RECT rc = getWindowSize();
	rc.Bottom = Height() - 1;
	setWindowSize(rc, TRUE);
        
	VisibleCaret(FALSE);

	const WORD color = BACKGROUND_RED | BACKGROUND_BLUE;
	DrawRect(0, 0, Width(), 3, color);
	DrawRect(0, Height() - 4, Width(), Height(), color);

	const TCHAR str[] = TEXT("\4 \4 \4 ЗМЕЙКА \4 \4 \4");
	const int   len   = lstrlen(str);
	WriteText(str, len, (Width() - len) / 2, 2, color | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);

	buttons.set_parameter(this, 3);
	buttons.add(0, TEXT("НАЧАТЬ ИГРАТЬ"), (Width() - 32)/2, 5,  32, 4);
	buttons.add(1, TEXT("СПРАВКА ИГРЫ"),  (Width() - 32)/2, 11, 32, 4);
	buttons.add(2, TEXT("ВЫЙТИ ИЗ ИГРЫ"), (Width() - 32)/2, 17, 32, 4);

	const TCHAR hlp[] = TEXT("Для выбора пункта меню используйте мышку или клавиши клавиатуры");
	WriteText(hlp, lstrlen(hlp), 2, Height()-2, color | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);

	setAsyncLoop(TRUE);

	msgbox.create(this);

	setActiveNoVisible(1);
	setFixedHeight(Height() / 9);
	setActiveNoVisible(0);
	level = 0;
}



//событие движение мыши
void  Snake::OnMouseMove(const COORD& pos){
	switch(state){
	case STATE_G_MENU:
		buttons.mouse_move(pos);
		break;
	}
}



void  Snake::OnMouseDown(UINT but, const COORD& pos){
	switch(state){
	case STATE_G_MENU:
		buttons.mouse_down(but, pos);
		break;
	}
}



void  Snake::OnMouseUp(const COORD& pos){
	if(state == STATE_G_MENU){
		switch(buttons.mouse_up(pos)){
		case GAME_CMD_START:
			draw_play();
			break;
		case GAME_CMD_HELP:
			show_help();
			break;
		case GAME_CMD_QUIT:
			setAsyncLoop(FALSE);
			break;
		}
	}
}



//событие нажатие клавиши клавиатуры
void Snake::OnKeyDown(WORD key){
	switch(state){
	case STATE_G_MENU:
		buttons.key_down(key);  
		break;
	case STATE_G_PLAY:
		switch(key){
		case VK_LEFT:
		case 'A':
			key_ctrl = VK_LEFT;
			break;
		case VK_RIGHT:
		case 'D':
			key_ctrl = VK_RIGHT;
			break;
		case VK_UP:
		case 'W':
			key_ctrl = VK_UP;
			break;
		case VK_DOWN:
		case 'S':
			key_ctrl = VK_DOWN;
			break;
		case VK_ESCAPE: //выход
			setAsyncLoop(FALSE);
			break;
		case VK_SPACE: //пауза пробел
			MessageBeep(MB_ICONINFORMATION);
			draw_pause();
			break;
		}
		break;
	}
}



//событие отпускание клавиши клавиатуры
void Snake::OnKeyUp(WORD key){
	if(state == STATE_G_MENU){
		switch(buttons.key_up(key)){
		case GAME_CMD_START:
			draw_play();
			break;
		case GAME_CMD_HELP:
			show_help();
			break;
		case GAME_CMD_QUIT:
			setAsyncLoop(FALSE);
			break;
		}
	}
}

Присоединяйся

Зарегестрируйся с помощью социальных сетей.

Публикуй

Опиши работу, прикрепи файлы и назначь цену.

Зарабатывай

Получай пассивный доход с продажи работ.

Тебе понадобится 5 минут для публикации работы на сайте.
Похожие работы
Купить

300,00 

(без учета комиссии 3,8 %)

snake.rar
96521
Оцени работу

рейтинг

Поделись работой с друзьями

Мы не грузим циферки, чтоб ты увидел контент как можно быстрее;

Комментарии (0)

alexfint32

/ /

Оставить комментарий

Ты не можешь комментировать

Только зарегестрированые пользователи имеют возможность комментировать работы
Игра Змейка. Shake. C++BUILDER6.0
Популярная игра Змейка. Исходники и скомпилированный *.exe файл.
Категория: Образование
Стоимость: 300,00