Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2014, 21:18   #1
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию GDI turn-based RPG project

Проект в стиле Heroes of might and magic.

Код:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <string.h>

#pragma comment(lib, "gdi32.lib")
#pragma comment(lib, "kernel32.lib")
#pragma comment(lib, "user32.lib")

LRESULT CALLBACK WndProc(HWND hand, UINT uMsg, WPARAM wParam, LPARAM lParam);

int sz=10;
int px=0;
int py=0;
int opx=-1;
int opy=-1;

struct creature { int attack; int defence; int power; int knowledge; creature(){attack=0; defence=0; power=0; knowledge=0;}};

struct hero { int attack; int defence; int power; int knowledge; hero(){attack=0; defence=0; power=0; knowledge=0;}};

struct city { strict hero* h; city() { h=NULL;}};

struct resource { int gold, wood, ore, crystal, sulfur, mercury, gems; resource(){gold=0; wood=0; ore=0; crystal=0; sulfur=0; mercury=0; gems=0;}};

struct resource p1;

struct field { int x, y, dx, dy, dxpszx, dxpszxpsz, dxpszxpsz2, dxpszxpszmsz2, dypszy, dypszypsz, dypszypsz, dypszypszpsz2, dypszymsz2;
void count(){ if(y%2==0) dx=0; else dx =sz/2; dy=(y+1)*(sz/2); dxpszx=dx+sz*x; dxpszxpsz=dx+sz*x+sz;dxpszxpsz2=dx+sz*x+sz/2; dxpszxpszmsz2=dx+sz*x+sz-sz/2; dypszy=dy+sz*y; dypszypsz=dy+sz*y+sz; dypszypszpsz2=dy+sz*y+sz+sz/2; dypszymsz2=dy+sz*y-sz/2;}
void draw(HDC hdc){
MoveToEx(hdc, dxpszx, dypszy, NULL); LineTo(hdc, dxpszx, dypszypsz);
MoveToEx(hdc, dxpszxpsz, dypszy, NULL); LineTo(hdc, dxpszxpsz, dypszypsz);
MoveToEx(hdc, dxpszx, dypszypsz, NULL); LineTo(hdc, dxpszxpsz2, dypszypszpsz2);
MoveToEx(hdc, dxpszxpsz, dypszypsz, NULL); LineTo(hdc, dxpszxpszmsz2, dypszypszpsz2);
MoveToEx(hdc, dxpszx, dypszy, NULL); LineTo(hdc, dxpszxpsz2, dypszymsz2);
MoveToEx(hdc, dxpszxpsz, dypszy, NULL); LineTo(hdc, dxpszxpszmsz2, dypszymsz2);
}};

struct n1
{
struct field** a; int n,m;
n1(){int i,j; n=18; m=13; a= new struct field*[m]; for(i=0;i<m;i++) a[i]=new struct field[n]; for(i=0; i<m; i++) for(j=0; j<n;j++){ a[i][j].x =j; a[i][j].y = i; a[i][j].count(); }}
void draw(HDC hdc){ int i,j; for(i=0; i<m; i++) for(j=0;j<n; j++) a[i][j].draw(hdc);}
};

struct n1 sf;

struct terrain
{
char str[1024];
int x, y, z, type, resource_type, resource_sum, monster_type, monster_sum, hero_type, city_type, object_type, portal_type, szx, szxpsz, szy, szypsz;
terrain(){type=0; resource_type=0; resource_sum=0; monster_type=0; monster_sum=0; hero_type=0; city_type=0; object_type=0; portal_type=0;}
void count(){ szx=sz*x; szxpsz=sz*x+sz; szy=sz*y; szypsz=sz*y+sz;}
void draw(HDC hdc){ if(x==px&&y==py)Ellipse(hdc, szx, szy, szxpsz, szypsz); MoveToEx(hdc, szx, szy, NULL); LineTo(hdc, szxpsz, szy); MoveToEx(hdc, szx, szy, NULL); LineTo(hdc, szx, szypsz); MoveToEx(hdc, szxpsz, szy, NULL); LineTo(hdc, szxpsz, szypsz); MoveToEx(hdc, szx, szypsz, NULL); LineTo(hdc, szxpsz, szypsz);}};

struct land
{
struct terrain** y; int n,m;

land(int a, int b){ int i,j; n=a; m=b; y= new terrain*[n]; for(i=0; i<n; i++) y[i]= new terrain[m]; for(i=0; i<n; i++) for(j=0; j<m; j++){y[i][j].x=j; y[i][j].y=i; y[i][j].count(); generate_resources(); generate_monsters(); generate_towns(); generate_heroes(); generate_objects(); generate_portals();}
void draw(HDC hdc){ int i,j; for(i=0; i<n; i++) for(j=0; j<m; j++) y[i][j].draw(hdc);}
void generate_resources(){ int i,j; srand(time(0)); for(i=0; i<n;i++) for (j=0; j<m; j++){ int rn= rand()%10; if (rn>7) rn=0; y[i][j].resource_type=rn; if(y[i][j].resource_type>0) y[i][j].resource_sum = 100* (rand()%20);}}
void generate_monsters(){ int i,j; srand(time(0)); for(i=0; i<n; i++) for(j=0; j<m; j++) { int rn = rand%70; y[i][j].monster_type= rn; if (y[i][j].monster_type>0) y[i][j].monster_sum = rand()%100;}}
void generate_towns(){}
void generate_heroes(){}
void generate_objects(){}
void generate_portals(){}
void check_resources(){ switch(y[py][px].resource_type){ case 0: break; case 1: p1.gold += y[py][px].resource_sum; break; case 2: p1.wood += += y[py][px].resource_sum; break;
case 3: p1.ore += y[py][px].resource_sum; break;
case 4: p1.crystal += y[py][px].resource_sum; break;
case 5: p1.sulfur += y[py][px].resource_sum; break;
case 6: p1.mercury += y[py][px].resource_sum; break;
case 7: p1.gems+= y[py][px].resource_sum; break;
default: break;
}}
};

struct land* ml;

struct cdraw
{
char str[1024];
HDC hdc;
void draw(HWND hwnd){ hdc= GetDC(hwnd); draw_text(); ml->draw(hdc); sf.draw(hdc); ReleaseDC(hwnd, hdc);}
void draw_text(){ sprintf(str, "px:%d py:%d gold:%d wood:%d ore:%d crystal:%d sulfur:%d mercury:%d gems:%d monster_type:%d monster_sum:%d\0", px,py,p1.gold, p1.wood, p1.ore, p1.crystal, p1.sulfur, p1.mercury, p1.gems, (ml->y)[py][px].monster_type, (ml->y)[py][px].monster_sum);
TextOut(hdc, 10, 700, str, strlen(str));}};
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 04.09.2014, 21:19   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Оставшаяся не вошедшая часть


Код:
struct cmain
{
cdraw d; WNDCLASSEX wc, MSG msg; HWND hwnd; HINSTANCE hInst;

void initialize(){ ml= new struct land(32, 64);}
void fregisterclass() { wc.cbSize=sizeof(WNDCLASSEX); wc.style= CS_HREDRAW|CS_VREDRAW; wc.lpfnWndProc = (WNDPROC) WndProc; wc.cbClsExtra= NULL; wc.cbWndExtra = NULL; wc.hInstance = hInst; wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); wc.lpszMenuName=NULL; wc.lpszClassName ="t"; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION); wc.hIconSm =LoadIcon(NULL,IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); RegisterClassEx(&wc);}
void fcreatewindow() { hwnd=CreateWindowEx(NULL,"t","title",WS_OVERLAPPEDWINDOW,0,0,1000,1000, NULL,NULL,hInst, NULL); ShowWindow(hwnd, 1); UpdateWindow(hwnd);}
int fmessagecycle(){ while(GetMessage(&msg, NULL, 0,0)){TranslateMessage(&msg); DispatchMessage(&msg);} return msg.wParam;}
int WINAPI WinMain(HINSTANCE  hInst, HINSTANCE hPrevInst, LPSTR CmdLine, int CmdShow){ fregisterclass(); fcreatewindow(); return fmessagecycle();}
int main(){ initialize(); hInst = GetModuleHandle(0); LPSTR CommandLine =GetCommandLine((; return WinMain(hInst, NULL, CommandLine, SW_SHOWDEFAULT);}
void paint_function(){ d.draw(hwnd);}
void key_function(WPARAM wParam, LPARAM lParam)
{ opx=px; opy=py; switch(wParam){
case VK_NUMPAD1: case VK_END: py++; px--; break;
case VK_NUMPAD2: case VK_DOWN: py++; break;
case VK_NUMPAD3: case VK_NEXT: py++; px++; break;
case VK_NUMPAD4: case VK_LEFT: px--; break;
case VK_NUMPAD6: case VK_RIGHT: px++; break;
case VK_NUMPAD7: case VK_HOME: py--; px--; break;
case VK_NUMPAD8: case VK_UP: py--; break;
case VK_NUMPAD9: case VK_PRIOR: py--; px++; break;
}
ml->check_resources();
}
};

cmain b;

int main(int argc, char* argv[]){ return b.main();}

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_DESTROY: PostQuitMessage( NULL); return 0;
case WM_PAINT: b.paint_function(); return 0;
case WM_KEYDOWN: b.key_function(wParam, lParam); return 0;
default: return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return DefWindowProc(hwnd,uMsg, wParam, lParam);
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 05.09.2014, 09:23   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Я не понял, вы жалуетесь или хвастаетесь?
waleri вне форума Ответить с цитированием
Старый 05.09.2014, 09:41   #4
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Я не понял, вы жалуетесь или хвастаетесь?
На gamedev пишут, что нужно наработки показывать, чтобы собрать команду, чтобы сделать игру..
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 05.09.2014, 09:47   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,881
По умолчанию

Если это Вы про сей проект говорили, что пытались написать своих героев, то, откровенно говоря, никакими героями тут не пахнет.

Всё, что я тут вижу, набор интов, разбросанных по структурам, из которых используется только разметка поля и бегающий по полю кружок, накручивающий счётчики ресурсов.
В лучшем случае , это заготовка пакмена, почти все начинающие wannabe-gamedev пишут такое.
Как бы ни было странно, полагаю, для Вас, использование идентификаторов с говорящими названиями не наделяет проект функциональностью.

Код, мягко говоря, плох, я хоть и не сишник (читаю могу, но не пишу), и то вижу, что тут не проследован даже один стиль, не говоря уж о каких-то style-guides. Даже банальное автоформатирование для отступов сделало бы много. Тупо опечатки (Вы вроде как претендуете на учебный характер изложения, эта тема и предыдущая, которая "пример"):
Код:
LPSTR CommandLine =GetCommandLine((;
case 2: p1.wood += += y[py][px].resource_sum;
По качеству самого кода - просто печаль, всё в кучу (как минимум, надо делить бизнес-логику и представление, а в играх ещё и на "суб-движки"), глобальные переменные и никакого сокрытия реализации, почти всё захардкодено, не прослеживается никакой гибкости и декомпозиции.
Идентификаторы одно-двухбуквенные и наборы букв , типа dypszypszpsz2 просто недопустимы, имхо, ведь есть же нормальное именование у части идентификаторов, почто другую часть обделили ?

Ну и уж даже неловко говорить, что надо бы экзешник, скриншот, указать язык, среду разработки и компилятор, плюс вопросы посетителю темы, описание желаемого фидбека.

П.С. я и с гораздо более серьёзными наработками не чаю заинтересовать народ уровня хотя бы старожилов форума, не говоря уж про геймдев, т.к. наработки должны иметь хотя бы треть (рабочую базу, которую надо будет допиливать и наполнять "мясом") от задуманного, которое прилагается в виде документации (хотя бы концепт-документа), иначе сомневаюсь, что соотв. люди заинтересуются.

Последний раз редактировалось phomm; 05.09.2014 в 09:52.
phomm вне форума Ответить с цитированием
Старый 05.09.2014, 11:53   #6
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Если уж у вас у структур есть методы (сугубо C++ фишка, в Сях такого не было), то пишите на нормальном C++. Прочитайте какую-нибудь толковую книжку по нему, а потом - хотя бы Мейерса: Effective C++ и/или More Effective C++.
Цитата:
нужно наработки показывать, чтобы собрать команду, чтобы сделать игру
Нужно их показывать, чтобы остальные могли оценить уровень вашего скилла. И только если сочтут его достаточно высоким - согласились бы пойти в команду. Пока очевидно одно - вам еще ОЧЕНЬ много надо курить в плане простого программирования. Когда раскурите как следует - напишите что-то имеющее бОльшую ценность и возвращайтесь. А пока вам - в С/С++ раздел этого форума.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 10.09.2014, 16:06   #7
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

GDI пакмен и тетрис я сделал еще в 2008 году. В прошлом году я делал это на DirectX. Тот проект http://www.cyberforum.ru/opengl/thre...ml#post3854990
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 10.09.2014, 18:55   #8
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Ну за 6 (прописью: шесть) лет, пожалуй, можно было бы изучить ООП и C++. И принципы написания маленьких приложений на тысячу строк кода. Страуструп вам в помощь, потом, как я уже написал, Мейерс. Потом можете всерьез подумать о создании сколько-нибудь внятных игр.
Впрочем, если считаете, что книжки вам уже не нужны - можете почитать то, что я писал про геймдев (ссылка на сайт в подписи, примерно то же - в закрепленной теме в этом же разделе, ссылка на нее тоже в подписи), ужаснуться и (разочароваться в игростроении || побежать учить язык).
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 11.09.2014, 08:27   #9
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

challengerr, не забывайте о бб-коде , если вы новичок на этом форуме.
ББ. Желаю вам дальнейшего развития в программировании на нынешнем уровне.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 11.09.2014, 10:26   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
Гром, иди на йух со своими советами ушлепок.
у меня на работе за такой код уволят с плохой записью в трудовой.
так что советую почитать все же.

PS: да и самому же неуютно читать это потом.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
GDI\GDI+\Photoshop - как добиться прозрачности пикселей определенного цвета? STRELOK-2007 Мультимедиа в Delphi 12 11.01.2014 13:37
‘Search-based GUI’ Glen Свободное общение 14 16.11.2011 11:40
Получаю сообщение "This file is used by the project manager only and should be treated like the project f fs444 C++ Builder 1 22.09.2009 11:05