Skip to content

Instantly share code, notes, and snippets.

@Sevitte
Last active June 20, 2017 11:20
Show Gist options
  • Save Sevitte/a5a276c05a62f301efd53ea10d4aeeb1 to your computer and use it in GitHub Desktop.
Save Sevitte/a5a276c05a62f301efd53ea10d4aeeb1 to your computer and use it in GitHub Desktop.
projekt.c
#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]);
}
#pragma once
void botPlays(void);
#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");
}
}
}
}
}
}
}
}
}
}
}
#pragma once
void printCastle(struct Player* player);
//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!");
}
#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(&currentPlayer, &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 = &bot;
oppositePlayer = &human;
while (stillPlaying == 0) //czy gra sie toczy?
{
swap(&currentPlayer, &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");
}
}
}
#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