Skip to content
Snippets Groups Projects
Commit a9d3f0d8 authored by Czémán Barnabás's avatar Czémán Barnabás
Browse files

Sok

parent 07223c35
Branches
No related tags found
No related merge requests found
File added
bg.jpg 0 → 100644
bg.jpg

31.8 KiB

button.png

414 B

colors.c 0 → 100644
#include "colors.h"
const SDL_Color white= {255,255,255,255};
const SDL_Color blue= {0,0,255,255}; /*1*/
const SDL_Color green= {0,255,0,255}; /*2*/
const SDL_Color red= {255,0,0,255}; /*3*/
const SDL_Color purple= {0,0,0,0}; /*4*/
const SDL_Color maroon= {0,0,0,0}; /*5*/
const SDL_Color turquoise= {0,0,0,0}; /*6*/
const SDL_Color black= {0,0,0,255}; /*7*/
const SDL_Color grey= {0,0,0,0}; /*8*/
enums.h 0 → 100644
#ifndef ENUMS_H_INCLUDED
#define ENUMS_H_INCLUDED
enum
{
CONTINUE,
NEW_GAME,
HIGH_SCORE,
QUIT_TO_OS
};
enum
{
BACK,
NEXT
};
enum
{
GAME,
PAUSE,
EXIT
};
enum
{
COVERED,
UNCOVERED,
FLAG
};
enum
{
EMPTY,
MINE=9
};
#endif
field.c 0 → 100644
#include "field.h"
#include "button.h"
#include "colors.h"
#include "enums.h"
void drawField(SDL_Surface* screen,SDL_Event* evt,Field* field){
drawButton(screen,evt,&field->btnField);
}
void setField(Field* field,int type)
{
setState(field,COVERED);
field->type=type;
}
void setState(Field* field,int value)
{
field->state=value;
}
void setFlag(Field* field)
{
if(field->state==FLAG)
{
setState(field,COVERED);
}
else if(field->state!=UNCOVERED)
{
setState(field,FLAG);
}
}
field.h 0 → 100644
#ifndef FIELD_H_INCLUDED
#define FIELD_H_INCLUDED
#include "button.h"
typedef struct
{
Button btnField;
int state;
int type;
} Field;
void drawField(SDL_Surface*,SDL_Event*,Field*);
void setField(Field*,int);
void setState(Field*,int);
#endif
field.jpg 0 → 100644
field.jpg

2.45 KiB

field20.png

243 B

game.c 0 → 100644
#include "game.h"
#include "button.h"
#include "input.h"
#include "enums.h"
int drawGameSetting(Game* game,SDL_Surface* screen,TTF_Font* fontMain,TTF_Font* fontField,SDL_Surface* bgMain,SDL_Surface* bgButton,SDL_Surface* bgField)
{
SDL_Rect rectBack= {200,380,200,50},rectNext= {420,380,200,50}, /*gombok*/
rectWidth= {200,220,200,50},rectHeight= {420,220,200,50},rectMines= {200,290,200,50}; /*input mezok*/
SDL_Event evt= {0};
Button btnBack,btnNext;
Input inputWidth,inputHeight,inputMines;
setButton(&btnBack,rectBack,bgButton,fontMain,"Back");
setButton(&btnNext,rectNext,bgButton,fontMain,"Next");
setInput(&inputWidth,bgButton,rectWidth);
setInput(&inputHeight,bgButton,rectHeight);
setInput(&inputMines,bgButton,rectMines);
while(/*TODO:Ez is egy ronda ciklus*/1)
{
SDL_WaitEvent(&evt);
SDL_BlitSurface(bgMain,NULL,screen,NULL);
/*gombok*/
drawButton(screen,&evt,&btnBack);
drawButton(screen,&evt,&btnNext);
/*gomb események*/
setButtonEvents(&btnBack,&evt);
setButtonEvents(&btnNext,&evt);
/*beviteli mezők rajzolása*/
drawInput(screen,&inputWidth);
drawInput(screen,&inputHeight);
drawInput(screen,&inputMines);
/*Beviteli események*/
setInputEvents(&inputWidth,&evt,fontMain,0);
setInputEvents(&inputHeight,&evt,fontMain,0);
setInputEvents(&inputMines,&evt,fontMain,0);
if(btnBack.leftButtonClicked==1)
{
return BACK;/*TODO:Felesleges*/
}
if(btnNext.leftButtonClicked==1)
{
/*FIXME:Table table; nélkül*/
createTable(&game->table,bgField,fontField,15/*game->width*/,15/*game->height*/);
generateTable((game->table),15,15,20/*game->mines*/);
return NEXT;
}
SDL_Flip(screen);
}
}
void drawGame(Game* game,SDL_Surface* screen,TTF_Font* fontButton,TTF_Font* fontField,SDL_Surface* bgMain,SDL_Surface* bgButton)
{
SDL_Rect rectPause= {420,420,200,50},rectReturn= {200,120,200,50},rectExit= {200,190,200,50};
SDL_Event evt= {0};
Button btnPause,btnReturn,btnExit;
int state=GAME;
setButton(&btnPause,rectPause,bgButton,fontButton,"Pause");
setButton(&btnReturn,rectReturn,bgButton,fontButton,"Return");
setButton(&btnExit,rectExit,bgButton,fontButton,"Exit");
while(state!=EXIT)
{
SDL_WaitEvent(&evt);
SDL_BlitSurface(bgMain,NULL,screen,NULL);
if(state==GAME)
{
drawButton(screen,&evt,&btnPause);
setButtonEvents(&btnPause,&evt);
drawTable(screen,game->table,fontField,&evt,15,15);
if(btnPause.leftButtonClicked==1)
{
state=PAUSE;
}
}
else /*TODO:Fügvény esetleg*/
{
drawButton(screen,&evt,&btnReturn);
drawButton(screen,&evt,&btnExit);
setButtonEvents(&btnReturn,&evt);
setButtonEvents(&btnExit,&evt);
if(btnReturn.leftButtonClicked==1)state=GAME;
if(btnExit.leftButtonClicked==1)
{
state=EXIT;
destroyTable(&game->table,15/*game->height*/);
/*TODO:Mentés*/
}
}
SDL_Flip(screen);
}
}
game.h 0 → 100644
#ifndef GAME_H_INCLUDED
#define GAME_H_INCLUDED
#include <SDL.h>
#include <SDL_ttf.h>
#include "table.h"
typedef struct Game
{
int width;
int height;
int mines;
Table table;
} Game;
int drawGameSetting(Game*,SDL_Surface*,TTF_Font*,TTF_Font*,SDL_Surface*,SDL_Surface*,SDL_Surface*);
void drawGame(Game*,SDL_Surface*,TTF_Font*,TTF_Font*,SDL_Surface*,SDL_Surface*);
#endif
#include "highscore.h"
#include "button.h"
void drawHighscore(SDL_Surface* screen,TTF_Font* fontMain,SDL_Surface* bgMain,SDL_Surface* bgButton)
{
SDL_Rect rectBack= {420,380,200,50};
SDL_Event evt= {0};
Button btnBack;
setButton(&btnBack,rectBack,bgButton,fontMain,"Back");
while(btnBack.leftButtonClicked!=1)
{
SDL_WaitEvent(&evt);
SDL_BlitSurface(bgMain,NULL,screen,NULL);
drawButton(screen,&evt,&btnBack);
setButtonEvents(&btnBack,&evt);
SDL_Flip(screen);
}
}
#ifndef HIGHSCORE_H_INCLUDED
#define HIGHSCORE_H_INCLUDED
#include <SDL.h>
#include <SDL_ttf.h>
void drawHighscore(SDL_Surface* screen,TTF_Font* font,SDL_Surface*bg,SDL_Surface* btnBg);
#endif
init.c 0 → 100644
#include "init.h"
void init_framework(SDL_Surface** screen)
{
SDL_Init(SDL_INIT_EVERYTHING);
IMG_Init(IMG_INIT_JPG);
*screen=SDL_SetVideoMode(640,480,32,/*SDL_ANYFORMAT*/SDL_FULLSCREEN);
SDL_EnableKeyRepeat(500, 30);
}
void init_ttf(TTF_Font** font)
{
TTF_Init();
*font = TTF_OpenFont("LiberationSerif-Regular.ttf", 20);
if (!*font)
{
fprintf(stderr, "Nem sikerult megnyitni a fontot! %s\n", TTF_GetError());
exit(2);
}
}
void quit_framework()
{
TTF_Quit();
SDL_Quit();
}
init.h 0 → 100644
#ifndef INIT_H_INCLUDED
#define INIT_H_INCLUDED
#include <SDL.h>
#include <SDL_ttf.h>
#include <SDL_image.h>
void init_framework(SDL_Surface**);
void init_ttf(TTF_Font** font);
void quit_framework();
#endif
menu.c 0 → 100644
#include "menu.h"
#include "button.h"
#include "SDL_image.h"
#include "enums.h"
int drawMenu(SDL_Surface* screen,TTF_Font* font,SDL_Surface* bg,SDL_Surface* btnBg)
{
SDL_Rect rectContinue= {200,50,200,50};
SDL_Rect rectNew= {200,120,200,50};
SDL_Rect rectHighScore= {200,190,200,50};
SDL_Rect rectExit= {200,410,200,50};
SDL_Event evt={0};
Button btnContinue,btnNew,btnHighScore,btnExit;
/*Menu gombok*/
setButton(&btnContinue,rectContinue,btnBg,font,"Continue");
setButton(&btnNew,rectNew,btnBg,font,"NewGame");
setButton(&btnHighScore,rectHighScore,btnBg,font,"HighScore");
setButton(&btnExit,rectExit,btnBg,font,"Exit");
/*Focus*/
setActive(&btnContinue,0);
/*setActive(&btnHighScore,0);*/
while(/*btnExit.leftButtonClicked!=1*//*TODO:Ez egy ronda ciklus :D*/1)
{
/*TODO:Tömbe helyezni és enum*/
SDL_BlitSurface(bg,NULL,screen,NULL);
drawButton(screen,&evt,&btnContinue);
drawButton(screen,&evt,&btnNew);
drawButton(screen,&evt,&btnHighScore);
drawButton(screen,&evt,&btnExit);
setButtonEvents(&btnContinue,&evt);
setButtonEvents(&btnNew,&evt);
setButtonEvents(&btnHighScore,&evt);
setButtonEvents(&btnExit,&evt);
if(btnContinue.leftButtonClicked==1)
{
return CONTINUE;
}
if(btnNew.leftButtonClicked==1)
{
return NEW_GAME;
}
if(btnHighScore.leftButtonClicked==1)
{
return HIGH_SCORE;
}
if(btnExit.leftButtonClicked==1)
{
return QUIT_TO_OS;
}
SDL_Flip(screen);
SDL_WaitEvent(&evt);
}
return 1;
}
menu.h 0 → 100644
#ifndef MENU_H_INCLUDED
#define MENU_H_INCLUDED
#include <SDL_ttf.h>
int drawMenu(SDL_Surface*,TTF_Font*,SDL_Surface*,SDL_Surface*);
#endif
table.c 0 → 100644
#include "table.h"
#include <stdlib.h>
#include "enums.h"
#include "colors.h"
void drawTable(SDL_Surface* screen,Table table,TTF_Font* font,SDL_Event* evt,int width,int height)/*Át gondolni a fontot*/
{
int x,y;
for(y=0; y<height; y++)
{
for(x=0; x<width; x++)
{
drawField(screen,evt,&table[y][x]);
setButtonEvents(&table[y][x].btnField,evt);
if(table[y][x].btnField.leftButtonClicked==1){
if(fieldRevealing(table,font,x,y,width,height))/*Vissza térés játék vége*/
{
/*TODO:Game over*/
}
}
if(table[y][x].btnField.rightButtonClicked==1){
setFlag(table[y][x]);
setText(&table[y][x].btnField,font,"F",red);
}
}
}
}
void createTable(Table* table,SDL_Surface* bgField,TTF_Font* fieldFont,int width,int height) /*TODO:Méret védelem,képméret alapján*/
{
int i,j;
SDL_Rect rectFields= {0,0,20,20};
/*TODO:Hiba kezelés*/
*table=(Table)malloc(sizeof(Field*)*height);
for(i=0; i<height; i++)
{
(*table)[i]=(Field*)malloc(sizeof(Field)*width);
}
/*TODO:Képmérethez szabni*/
rectFields.x=320-10*width;/*(640-20*width)/2*/
rectFields.y=240-10*height;/*(240-20*heght)/2*/
for(i=0; i<height; i++)
{
for(j=0; j<width; j++)
{
setButton(&((*table)[i][j]).btnField,rectFields,bgField,fieldFont," ");
(*table)[i][j].type=0;
(*table)[i][j].state=0;
rectFields.x+=20;/*széleség*/
}
rectFields.x=320-10*width;/*(640-20*width)/2*/
rectFields.y+=20;/*magasság*/
}
}
void destroyTable(Table* table,int height)/*TODO:Vektoros módszer*/
{
int i;
for(i=0; i<height; i++)
{
/*free(table[i]);*/
}
/*free(table);*/
}
void generateTable(Table table,int width,int height,int mines)
{
int i,j,k,x,y;
for(i=0; i<mines; i++)
{
x=rand()%width;
y=rand()%height;
if(table[y][x].type!=MINE)
{
table[y][x].type=MINE;
for(j=-1; j<2; j++)/*Y*/
{
for(k=-1; k<2; k++)/*X*/
{
if( (0<=x+k && x+k < width) && (0<=y+j && y+j < height) )
{
if(table[y+j][x+k].type!=MINE)
{
table[y+j][x+k].type++;
}
}
}
}
}
else
{
i--;
}
}
}
void allFieldRevealing(Table table,TTF_Font* font,int width,int height){
int x,y;
char puffer[2];
for(y=0;y<height;y++){
for(x=0;x<width;x++){
if(table[y][x].state!=UNCOVERED){
table[y][x].state=UNCOVERED;
if(table[y][x].type==MINE){
setText(&table[y][x].btnField,font,"*",red);
table[y][x].btnField.isActive=0;
}
else{
if(table[y][x].type==EMPTY){
table[y][x].btnField.isActive=0;
}else{
table[y][x].btnField.isActive=0;
sprintf(puffer,"%d",table[y][x].type);
setText(&table[y][x].btnField,font,puffer,white);
}
}
}
}
}
}
int fieldRevealing(Table table,TTF_Font* font,int x,int y,int width,int height){
int i,j,ret=0;
char puffer[2];
if(table[y][x].type==9)
{
ret=1;
allFieldRevealing(table,font,width,height);
}
else
{
table[y][x].state=1;
table[y][x].btnField.isActive=0;
if(table[y][x].type!=0){
sprintf(puffer,"%d",table[y][x].type);
setText(&table[y][x].btnField,font,puffer,white);
}
for(i=-1; i<2; i++)
{
for(j=-1; j<2; j++)
{
if( (0<=x+j && x+j<width) && (0<=y+i && y+i<height))
{
if(table[y][x].type==0 && table[y+i][x+j].state!=2 && table[y+i][x+j].state!=1)
{
ret=fieldRevealing(table,font,x+j,y+i,width,height);
}
}
}
}
}
return ret;
}
table.h 0 → 100644
#ifndef TABLE_H_INCLUDED
#define TABLE_H_INCLUDED
#include "field.h"
typedef Field** Table;
void drawTable(SDL_Surface*,Table,TTF_Font*,SDL_Event*,int width,int height);
/*Mentés és visszatöltés*/
void saveTable();
void loadTable();
/*Példányosítás és eltörlés*/
void createTable(Table* table,SDL_Surface*,TTF_Font*,int,int);
void destroyTable(Table*,int);
/*Pálya generálás*/
void generateTable(Table,int width,int height,int mines);
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment