Last active
June 20, 2017 11:20
-
-
Save Sevitte/a5a276c05a62f301efd53ea10d4aeeb1 to your computer and use it in GitHub Desktop.
projekt.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "Game.h" | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <time.h> | |
#include <errno.h> | |
#include <string.h> | |
void botPlays(void) | |
{ | |
int cardNumber = rand() % 8; | |
int needMore = canUseCard((bot).Cards[cardNumber], &bot); | |
if (needMore == 1) | |
newCard(cardNumber, &bot); | |
else | |
switchCardDoAction((bot).Cards[cardNumber]); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma once | |
void botPlays(void); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "Game.h" | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <time.h> | |
#include <errno.h> | |
#include <string.h> | |
void printCastle(struct Player* player) | |
{ | |
if ((*player).castle > 0) | |
{ | |
printf(" /\\\n"); | |
printf(" / \\\n"); | |
printf(" / \\\n"); | |
printf(" /______\\\n"); | |
if ((*player).castle > 10) | |
{ | |
printf(" | /_\\|\n"); | |
if ((*player).castle > 20) | |
{ | |
printf(" | |\n"); | |
if ((*player).castle > 30) | |
{ | |
printf(" | /_\\ |\n"); | |
if ((*player).castle > 40) | |
{ | |
printf(" | |\n"); | |
if ((*player).castle > 50) | |
{ | |
printf(" | /_\\|\n"); | |
if ((*player).castle > 60) | |
{ | |
printf(" | |\n"); | |
if ((*player).castle > 70) | |
{ | |
printf(" | /_\\ |\n"); | |
if ((*player).castle > 80) | |
{ | |
printf(" | |\n"); | |
if ((*player).castle > 90) | |
{ | |
printf(" | /\\ |\n"); | |
if ((*player).castle > 95) | |
printf("_|_/__\\_|_\n"); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma once | |
void printCastle(struct Player* player); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//TODO ktore karty mozna uzyc | |
//TODO menu | |
//TODO karty osobny plik | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <time.h> | |
#include <errno.h> | |
#include <string.h> | |
#include "Game.h" | |
int main(void) | |
{ | |
system("color 12"); | |
srand(time(NULL)); | |
rungame(); | |
system("color 47"); | |
printf("Koniec Gry!"); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "Game.h" | |
#include <stdio.h> | |
#include <time.h> | |
#include <errno.h> | |
#include <stdlib.h> | |
#include <string.h> | |
int AllCards[7] = { 0,1,2,3,4,5,6 }; | |
struct Player bot; | |
struct Player human; | |
struct Player* currentPlayer; | |
struct Player* oppositePlayer; | |
const int BRICKS = 0; | |
const int WEAPONS = 1; | |
const int DIAMONDS = 2; | |
const int BUILDERS = 0; | |
const int WARRIORS = 1; | |
const int MAGICS = 2; | |
void swap(struct Player* *a, struct Player* *b) | |
{ | |
struct Player* temp = *a; | |
*a = *b; | |
*b = temp; | |
} | |
int isInt(char *str) | |
{ | |
int a; | |
for (a = 0; a < strlen(str); a++) | |
{ | |
if (str[a] < '0' || str[a]>'9') | |
return 0; | |
} | |
return 1; | |
} | |
void incrementResources(struct Player* player) | |
{ | |
int i; | |
for (i = 0; i < 3; i++) | |
{ | |
(*player).Resources[i] += (*player).Producers[i]; | |
} | |
} | |
void initPlayer(struct Player* player) { | |
int i; | |
for (i = 0; i < 3; i++) { | |
(*player).Producers[i] = 2; | |
(*player).Resources[i] = 5; | |
} | |
(*player).fence = 10; | |
(*player).castle = 30; | |
} | |
void Babylon(int a, int b) | |
{ | |
(*currentPlayer).castle += a; | |
(*currentPlayer).Resources[BRICKS] -= b; | |
} | |
void Swat(void) | |
{ | |
(*oppositePlayer).castle -= 10; | |
(*currentPlayer).Resources[WEAPONS] -= 18; | |
} | |
void Thief(void) | |
{ | |
int i; | |
for (i = 0; i < 3; i++) | |
{ | |
if ((*oppositePlayer).Resources[i] < 6) | |
(*oppositePlayer).Resources[i] = 0; | |
else | |
(*oppositePlayer).Resources[i] -= 5; | |
(*currentPlayer).Resources[i] += 5; | |
} | |
(*currentPlayer).Resources[WEAPONS] -= 15; | |
} | |
void School() //8 cegiel | |
{ | |
(*currentPlayer).Producers[BUILDERS] += 1; | |
(*currentPlayer).Resources[BRICKS] -= 8; | |
} | |
void Recruit() //8 mieczy | |
{ | |
(*currentPlayer).Producers[WARRIORS] += 1; | |
(*currentPlayer).Resources[WEAPONS] -= 8; | |
} | |
void Sorcerer() //8diax | |
{ | |
(*currentPlayer).Producers[MAGICS] += 1; | |
(*currentPlayer).Resources[DIAMONDS] -= 8; | |
} | |
int checkCastles() | |
{ | |
int i; | |
int a = 0; | |
for (i = 0; i<2; i++) | |
{ | |
if ((*currentPlayer).castle >= 100 || (*currentPlayer).castle <= 0) | |
{ | |
a = 1; | |
swap(¤tPlayer, &oppositePlayer); | |
} | |
} | |
return a; | |
} | |
void initCards(struct Player* player) | |
{ | |
srand(time(NULL)); | |
int j, a; | |
const int MAX_CARDS = 8; | |
for (j = 0; j < MAX_CARDS; j++) | |
{ | |
a = rand() % VARIOUS_CARDS; //losowanie liczby dla gracza | |
(*player).Cards[j] = AllCards[a]; | |
} | |
} | |
void show(void) | |
{ | |
printf(" You: Opponent:\n"); | |
printStats(&human, &bot); | |
} | |
void printStats(struct Player* player, struct Player* player2) | |
{ | |
int bricks = (*player).Resources[0]; | |
int weapons = (*player).Resources[1]; | |
int diamonds = (*player).Resources[2]; | |
int builders = (*player).Producers[0]; | |
int warriors = (*player).Producers[1]; | |
int magics = (*player).Producers[2]; | |
int fence = (*player).fence; | |
int castle = (*player).castle; | |
int bricks2 = (*player2).Resources[0]; | |
int weapons2 = (*player2).Resources[1]; | |
int diamonds2 = (*player2).Resources[2]; | |
int builders2 = (*player2).Producers[0]; | |
int warriors2 = (*player2).Producers[1]; | |
int magics2 = (*player2).Producers[2]; | |
int fence2 = (*player2).fence; | |
int castle2 = (*player2).castle; | |
printf(" BRICKS \t %3d ;BRICKS \t %3d \n WEAPONS \t %3d ;WEAPONS \t %3d\n DIAMONDS \t %3d ;DIAMONDS \t %3d\n BUILDERS \t %3d ;BUILDERS \t %3d\n WARRIORS \t %3d ;WARRIORS \t %3d\n MAGICS \t %3d ;MAGICKS \t %3d\n FENCE \t\t %3d ;FENCE \t %3d\n CASTLE \t %3d ;CASTLE \t %3d\n", bricks, bricks2, weapons, weapons2, diamonds, diamonds2, builders, builders2, warriors, warriors2, magics, magics2, fence, fence2, castle, castle2); | |
} | |
void switchPrint(int cardType) | |
{ | |
switch (cardType) | |
{ | |
case 0: printf(" BABYLON 39 BRICKS\nCASTLE+32\n\n"); break; | |
case 1: printf(" SWAT 18 SWORDS\nATTACK 10\n\n"); break; | |
case 2: printf(" THIEF 15 SWORDS\nSTEAL 5 RESOURCES\n\n"); break; | |
case 3: printf(" TOWER 5 BRICKS\nCASTLE+5\n\n"); break; | |
case 4: printf(" SCHOOL 8 BRICKS\nBUILDERS+1\n\n"); break; | |
case 5: printf(" RECRUIT 8 SWORDS\nWARRIORS+1\n\n"); break; | |
case 6: printf(" SORCERER 8 DIAMONDS\nMAGICKS+1\n\n"); break; | |
} | |
} | |
void switchCardDoAction(int cardType) | |
{ | |
switch (cardType) | |
{ | |
case 0: Babylon(32, 39); break; | |
case 1: Swat(); break; | |
case 2: Thief(); break; | |
case 3: Babylon(5, 5); break; | |
case 4: School(); break; | |
case 5: Recruit(); break; | |
case 6: Sorcerer(); break; | |
} | |
} | |
int canUseCard(int cardType, struct Player* player) | |
{ | |
int needMore = 0; | |
switch (cardType) | |
{ | |
case 0: if ((*player).Resources[BRICKS]<39) | |
needMore = 1; | |
break; | |
case 1: if ((*player).Resources[WEAPONS]<18) | |
needMore = 1; | |
break; | |
case 2: if ((*player).Resources[WEAPONS]<5) | |
needMore = 1; | |
break; | |
case 3: if ((*player).Resources[BRICKS]<5) | |
needMore = 1; | |
break; | |
case 4: if ((*player).Resources[BRICKS]<8) | |
needMore = 1; | |
break; | |
case 5: if ((*player).Resources[WEAPONS]<8) | |
needMore = 1; | |
break; | |
case 6: if ((*player).Resources[DIAMONDS]<8) | |
needMore = 1; | |
break; | |
} | |
if (needMore == 1) | |
printf("You can not use this card\n"); | |
return needMore; | |
} | |
void printCards(struct Player* player) | |
{ | |
int j; | |
const int MAX_CARDS = 8; | |
for (j = 0; j < MAX_CARDS; j++) | |
{ | |
printf("%d ", j); | |
switchPrint((*player).Cards[j]); | |
} | |
} | |
void newCard(int cardNumber, struct Player* player) // TODO cardNumber?? | |
{ | |
srand(time(NULL)); | |
int a; | |
a = rand() % VARIOUS_CARDS; | |
(*player).Cards[cardNumber] = AllCards[a]; | |
} | |
int errorNumber() { | |
return errno; | |
} | |
void scanCard(void) | |
{ | |
int cardNumber; | |
int useOrDiscard; | |
int i = 0; | |
int needMore = 1; | |
do | |
{ | |
do | |
{ | |
if (i > 0) | |
printf(" Say 1 if you want to use, or 0 if you want to discard!\n"); | |
printf("Do you want to use or discard card?\n"); | |
char str[10]; | |
scanf("%s", &str); | |
int c = isInt(str); | |
if (c == 1) | |
useOrDiscard = atoi(str); | |
else | |
useOrDiscard = -1; | |
i++; | |
} while (useOrDiscard != 0 && useOrDiscard != 1); | |
do | |
{ | |
printf("Which card do you want to use/discard? 0-7\n"); | |
scanf("%d", &cardNumber); | |
} while (cardNumber > 7 || cardNumber < 0); | |
if (useOrDiscard == 1) | |
{ | |
needMore = canUseCard((human).Cards[cardNumber], &human); | |
} | |
if (useOrDiscard == 0) | |
needMore = 0; | |
} while (needMore != 0); | |
if (useOrDiscard == 0) | |
{ | |
newCard(cardNumber, &human); | |
} | |
if (useOrDiscard == 1) | |
{ | |
switchCardDoAction((human).Cards[cardNumber]); | |
newCard(cardNumber, &human); | |
} | |
} | |
void pickCard(void) | |
{ | |
printCards(&human); | |
scanCard(); | |
} | |
void rungame(void) | |
{ | |
int stillPlaying = 0; | |
const int BOT = 1; | |
int whoPlays = 0; //gre zaczyna gracz | |
initPlayer(&human); //dostaje zasoby | |
initPlayer(&bot); | |
initCards(&human); | |
initCards(&bot); | |
currentPlayer = ⊥ | |
oppositePlayer = &human; | |
while (stillPlaying == 0) //czy gra sie toczy? | |
{ | |
swap(¤tPlayer, &oppositePlayer); | |
show(); //pokazuje na ekranie wszystko oprocz kart | |
if (whoPlays == BOT) //1 to bot | |
{ | |
botPlays();//bot wybiera karte i ja uzywa | |
incrementResources(&human);//gracz dostaje zasoby | |
whoPlays = (whoPlays + 1) % 2; //przygotowuje zmiane gracza na nastepna runde | |
} | |
else | |
{ | |
printCastle(&human); | |
pickCard(); // zostaja wyswietlone karty gracza, gracz podaje ktora karte chce uzyc | |
//trzeba sprawdzic, czy gracz podaje dobry numer karty, czy ma odpowiednia ilosc zasobow, | |
//jezeli nie moze rzadnej karty uzyc(brak zasobow na wszystkie), to kosztem rundy losowo zastepuje ostatnia dobrana. | |
whoPlays = (whoPlays + 1) % 2; //przygotowuje zmiane gracza na nastepna runde | |
stillPlaying= checkCastles(); //sprawdza czy gra sie skonczyla po uzyciu ostatniej karty | |
incrementResources(&bot); | |
system("@cls||clear"); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma once | |
#include <stdio.h> | |
#include <time.h> | |
#include <errno.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include "Bot.h" | |
#include "Castle.h" | |
#define VARIOUS_CARDS (7) | |
extern int AllCards[]; | |
extern struct Player bot; | |
extern struct Player human; | |
extern struct Player* currentPlayer; | |
extern struct Player* oppositePlayer; | |
extern const int BRICKS; | |
extern const int WEAPONS; | |
extern const int DIAMONDS; | |
extern const int BUILDERS; | |
extern const int WARRIORS; | |
extern const int MAGICS; | |
struct Player { | |
int castle; | |
int fence; | |
int isBot; | |
int Producers[3];// = { Builders, Wariors, Magics }; | |
int Resources[3];// = { Blocks, Weapons, Diamonds } | |
int Cards[8];// = {Platoon, Knight, Reserve, Tower, School, Conjure Bricks, Curse, Recruit, Sorcerer, Wain, Defence, Banshee, Babylon, Attack, SWAT, Thief} | |
}; | |
struct Card | |
{ | |
int CardNumber; | |
int Cost; | |
int CostResource; | |
char* Name; | |
}; | |
void swap(struct Player* *a, struct Player* *b); | |
void printStats(struct Player* player, struct Player* player2); | |
void show(); | |
void pickCard(); | |
int checkCastles(); | |
void rungame(); | |
void incrementResources(); | |
void initCards(); | |
int canUseCard(int cardType, struct Player* player); | |
void switchPrint(int cardType); | |
void switchCardDoAction(int cardType); | |
void printCards(struct Player* player); | |
void newCard(int cardNumber, struct Player* player); | |
void scanCard(); | |
int isInt(char *str); | |
void Swat(); | |
void Babylon(); | |
void Thief(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment