This commit is contained in:
Saturneric 2020-09-01 00:17:06 +08:00
parent 285eba7197
commit 57056b9625
13 changed files with 719 additions and 0 deletions

72
army.cpp Normal file
View File

@ -0,0 +1,72 @@
//
// army.cpp
// nation_war
//
// Created by Saturneric on 17/1/16.
// Copyright © 2017年 Bakantu Eric. All rights reserved.
//
#include "game.h"
#include "event.h"
list<class army *> amy_vec;
army::army(class nation *p_ntn, class land *p_lnd, int t_amyofe, int num){
pm_lnd = p_lnd;
pm_ntn = p_ntn;
amyofe = t_amyofe;
sldmun = num;
sldeqp = p_ntn->amyeqp;
amycst = p_ntn->amycst;
amy_vec.push_back(this);
}
army::~army(void){
remove(amy_vec.begin(), amy_vec.end(), this);
delete this;
}
int army::upgrade(void){
sldmun = amyofe * (pm_ntn->amypeo);
sldeqp = pm_ntn->amyeqp;
amycst = pm_ntn->amycst;
return 0;
}
int army::fight(void){
return sldmun*sldeqp;
}
int army::kill(int num){
if (num <= sldmun){
sldmun -= num;
}
else return -1;
return 0;
}
int army::add(int num){
if ((sldmun + num) <= (pm_ntn->amypeo * amyofe)){
if (pm_lnd->manpow >= num){
sldmun += num;
}
else return -1;
}
else return -1;
return 0;
}
int army::move(class land *toland){
addarmymove(pm_lnd, toland, this);
return 0;
}
int army::amy_cost(void){
return (sldmun * (1+pm_ntn->embezzle) * amycst) + (amyofe * pm_ntn->amyoffcst);
}
int army::del(void){
remove(amy_vec.begin(), amy_vec.end(), this);
return 0;
}

34
army.h Normal file
View File

@ -0,0 +1,34 @@
//
// army.h
// nation_war
//
// Created by Saturneric on 17/1/16.
// Copyright © 2017年 Bakantu Eric. All rights reserved.
//
#ifndef army_h
#define army_h
class army {
public:
int sldmun;
int amyofe;
int sldeqp;
int amycst;
int armyv;
class land *pm_lnd;
class nation *pm_ntn;
int upgrade(void);
int move(class land *toland);
int amy_cost(void);
int fight(void);
int kill(int num);
int add(int num);
int del(void);
army(class nation *p_ntn, class land *p_lnd, int t_amyofe, int num);
~army(void);
};
#endif /* army_h */

10
event.cpp Normal file
View File

@ -0,0 +1,10 @@
//
// event.cpp
// nation_war
//
// Created by Saturneric on 17/1/21.
// Copyright © 2017年 Bakantu Eric. All rights reserved.
//
#include "game.h"

42
event.h Normal file
View File

@ -0,0 +1,42 @@
//
// event.h
// nation_war
//
// Created by Saturneric on 17/1/16.
// Copyright © 2017年 Bakantu Eric. All rights reserved.
//
#ifndef event_h
#define event_h
class war{
class army *f_amy;
class army *s_amy;
int f_rand;
int s_rand;
public:
war(class army *pf_amy, class army *ps_amy);
class army *fight(void);
};
class move{
class army *p_amy;
class land *f_lnd;
class land *t_lnd;
public:
move(class army *p_amy, class land *f_lnd, class land *t_lnd);
int go(void);
};
class event{
int time;
void *(func());
void *value;
public:
event(int time, void *(func()), void *value);
};
#endif /* event_h */

52
factory.cpp Normal file
View File

@ -0,0 +1,52 @@
//
// factory.cpp
// nation_war
//
// Created by Saturneric on 17/1/16.
// Copyright © 2017年 Bakantu Eric. All rights reserved.
//
#include "game.h"
list<class factory *> ftc_vec;
factory::factory(class land *p_lnd, class nation *p_ntn, int t_plcnum, int num){
pm_ntn = p_ntn;
pm_lnd = p_lnd;
plcnum = t_plcnum;
mpw = num;
pdt = p_ntn->pdteff;
ftc_vec.push_back(this);
}
factory::~factory(void){
remove(ftc_vec.begin(),ftc_vec.end(),this);
delete this;
}
int factory::setmpw(int num){
if(num < plcnum*pdt){
mpw = num;
}
return 0;
}
int factory::upgrade(void){
pdt = pm_ntn->pdteff;
return 0;
}
int factory::setplc(int num){
if (num < 0) return -1;
if (num * pm_ntn->plcpeo < mpw){
mpw = num * pm_ntn->plcpeo;
}
plcnum = num;
return 0;
}
int factory::getpdt(void){
return (mpw * pdt * (1 - pm_ntn->embezzle)) - (plcnum * pm_ntn->plcoffcst);
}

29
factory.h Normal file
View File

@ -0,0 +1,29 @@
//
// factory.h
// nation_war
//
// Created by Saturneric on 17/1/16.
// Copyright © 2017年 Bakantu Eric. All rights reserved.
//
#ifndef factory_h
#define factory_h
class factory {
public:
int mpw;
int plcnum;
int pdt;
class land *pm_lnd;
class nation *pm_ntn;
int setmpw(int num);
int getpdt(void);
int upgrade(void);
int setplc(int num);
factory(class land *p_lnd, class nation *p_ntn, int t_plcnum, int num);
~factory(void);
};
#endif /* factory_h */

115
game.cpp Normal file
View File

@ -0,0 +1,115 @@
//
// game.cpp
// nation_war
//
// Created by Saturneric on 17/1/21.
// Copyright © 2017年 Bakantu Eric. All rights reserved.
//
#include "game.h"
list<class route *> route_vec;
list<class armymove *> armymove_vec;
route::route(class land *f_lnd, class land *t_lnd, int distance){
this->f_lnd = f_lnd;
this->t_lnd = t_lnd;
this->distance = distance;
route_vec.push_back(this);
}
int mdistance;
list<class route *> dway;
list<class route *> findway(class land *f_lnd, class land *t_lnd){
dway.clear();
mdistance = 0;
list<class route *>ntway;
getway(f_lnd, t_lnd, 0, ntway);
return dway;
}
int getway(class land *f_lnd, class land *t_lnd,int tdistance, list<class route *>tway){
class land *pt_lnd;
while (pt_lnd == t_lnd){
for(list<class route *>::iterator lit = route_vec.begin(); lit != route_vec.end(); lit++){
if ((*lit)->f_lnd == f_lnd){
tdistance += (*lit)->distance;
tway.push_back(*lit);
if ((*lit)->t_lnd == t_lnd){
if (mdistance == 0){
dway = tway;
mdistance = tdistance;
tway.pop_back();
}
else {
if (tdistance < mdistance){
dway = tway;
mdistance = tdistance;
}
tway.pop_back();
tdistance -= (*lit)->distance;
}
}
else{
list<class route *>ntway;
copy(tway.begin(), tway.end(), back_inserter(ntway));
if (mdistance != 0){
if (tdistance > mdistance){
tway.pop_back();
tdistance -= (*lit)->distance;
}
else{
getway((*lit)->f_lnd, t_lnd, tdistance, ntway);
}
}
else{
getway((*lit)->f_lnd, t_lnd, tdistance, ntway);
}
}
}
}
}
tway.clear();
return 0;
}
armymove::armymove(class land *templand, class land *toland, list<class route *>way, class army *parmy){
armymove_vec.push_back(this);
this->templnd = templand;
this->tolnd = toland;
this->way = way;
proute = way.begin();
lastdistance = (*proute)->distance;
this->parmy = parmy;
}
int armymove::golnd(void){
lastdistance -= parmy->armyv;
if (lastdistance <= 0){
templnd = (*proute)->t_lnd;
parmy->pm_lnd = templnd;
if (proute != way.end()){
proute++;
lastdistance = (*proute)->distance;
}
else{
return -1;
}
}
return 0;
}
int addarmymove(class land *templand, class land *toland, class army *parmy){
list<class route *> way = findway(templand, toland);
armymove *tam = new armymove(templand, toland, way, parmy);
armymove_vec.push_back(tam);
return 0;
}
int engine(void){
return 0;
}

61
game.h Normal file
View File

@ -0,0 +1,61 @@
//
// game.h
// nation_war
//
// Created by Saturneric on 17/1/17.
// Copyright © 2017年 Bakantu Eric. All rights reserved.
//
#ifndef game_h
#define game_h
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <list>
#include <GLUT/glut.h>
#include "nation.h"
#include "factory.h"
#include "army.h"
#include "land.h"
#include "event.h"
using namespace std;
extern list<class factory *> ftc_vec;
extern list<class nation *> ntn_vec;
extern list<class land *> land_vec;
extern list<class army *> amy_vec;
extern list<class event *> event_vec;
extern list<class route *> route_vec;
class route {
public:
class land *f_lnd;
class land *t_lnd;
int distance;
route(class land *f_lnd, class land *t_lnd, int distance);
};
class armymove {
class land *templnd;
class land *tolnd;
int lastdistance;
class army *parmy;
list<class route *>::iterator proute;
list<class route *> way;
public:
int golnd(void);
armymove(class land *templand, class land *toland, list<class route *>way, class army *parmy);
};
int getway(class land *f_lnd, class land *t_lnd, int tdistance, list<class route *>tway);
list<class route *> findway(class land *f_lnd, class land *t_lnd);
int addarmymove(class land *templand, class land *toland, class army *parmy);
#endif /* game_h */
int engine(void);

88
land.cpp Normal file
View File

@ -0,0 +1,88 @@
//
// land.cpp
// nation_war
//
// Created by Saturneric on 17/1/16.
// Copyright © 2017年 Bakantu Eric. All rights reserved.
//
#include "game.h"
list<class land *> land_vec;
land::land(){
srand((unsigned int)time(NULL));
manpow = rand()%500;
mpwmax = rand()%2500 + 800;
mpwplus = rand()%15;
resource = rand()%1000;
resmax = rand()%8000;
resplus = rand()%50;
pm_ntn = NULL;
fctinit = rand()%4;
fctnum = 0;
land_vec.push_back(this);
}
land::~land(void){
remove(land_vec.begin(),land_vec.end(),this);
delete this;
}
int land::resrec(void){
if (resource + resplus < resmax){
resource += resplus;
}
else{
resource = resmax;
}
return 0;
}
int land::mpwrec(void){
if (manpow + mpwplus < mpwmax){
manpow += mpwplus;
}
else {
manpow = mpwmax;
}
return 0;
}
int land::getmpw(int num){
if (num <= manpow){
manpow -= num;
}
else return -1;
return 0;
}
int land::getres(int num){
if (num <= resource){
resource -= num;
}
else return -1;
return 0;
}
class nation *target_ntn = NULL;
bool ntn_fct(const class factory *p_fct) {
if (p_fct->pm_ntn == target_ntn){
return true;
}
return false;
}
int land::cgentn(class nation *p_ntn){
if (p_ntn != NULL){
target_ntn = pm_ntn;
remove_if(ftc_vec.begin(),ftc_vec.end(),ntn_fct);
target_ntn = NULL;
pm_ntn = p_ntn;
fctnum = 0;
}
else return -1;
return 0;
}

34
land.h Normal file
View File

@ -0,0 +1,34 @@
//
// land.h
// nation_war
//
// Created by Saturneric on 17/1/16.
// Copyright © 2017年 Bakantu Eric. All rights reserved.
//
#ifndef land_h
#define land_h
class land {
public:
int manpow;
int mpwplus;
int mpwmax;
int resource;
int resplus;
int resmax;
int fctnum;
int fctinit;
class nation *pm_ntn;
int resrec(void);
int mpwrec(void);
int getmpw(int num);
int getres(int num);
int cgentn(class nation *p_ntn);
land(void);
~land(void);
};
#endif /* land_h */

17
main.cpp Normal file
View File

@ -0,0 +1,17 @@
//
// main.cpp
// nation_war
//
// Created by Saturneric on 17/1/16.
// Copyright © 2017年 Bakantu Eric. All rights reserved.
//
#include "game.h"
using namespace std;
int main(int argc, const char * argv[]) {
return 0;
}

95
nation.cpp Normal file
View File

@ -0,0 +1,95 @@
//
// nation.cpp
// nation_war
//
// Created by Saturneric on 17/1/16.
// Copyright © 2017年 Bakantu Eric. All rights reserved.
//
#include "game.h"
list<class nation *> ntn_vec;
nation::nation(int s_id){
amycst = 1;
fund = 1000;
embezzle = 0.5;
pdteff = 10;
n_id = s_id;
plcpeo = 20;
amypeo = 50;
amyeqp = 1;
amyoffcst = 15;
plcoffcst = 10;
lndplus = 2;
}
int nation::send_fund(int send){
fund += send;
return 0;
}
int nation::set_amy(int sld_num,int mf_num, class land *p_land){
if (sld_num <= p_land->manpow && p_land->pm_ntn == this){
new army(this, p_land, mf_num, sld_num);
p_land->getmpw(sld_num);
}
else return -1;
return 0;
}
int nation::set_fct(int mpw_num, int pf_num,class land *p_land){
if (mpw_num <= p_land->manpow && p_land->pm_ntn == this){
if (p_land->fctnum < (p_land->fctinit+this->lndplus)){
new factory(p_land,this,pf_num,mpw_num);
p_land->getmpw(mpw_num);
}
else return -2;
}
else return -1;
return 0;
}
int pdt_tech_def::upd_fct(class nation *p_ntn){
if (p_ntn->fund - fctgde * fctgde * 100 >= 0){
p_ntn->fund -= fctgde * fctgde * 100;
p_ntn->pdteff = p_ntn->pdteff * fctgde;
}
else return -1;
return 0;
}
int pdt_tech_def::upd_lnd(class nation *p_ntn){
if (p_ntn->fund - lndgde * lndgde * 100 >= 0){
p_ntn->fund -= lndgde * lndgde * 100;
p_ntn->lndplus += 1;
}
return 0;
}
int ofc_tech_def::ugd_plc(class nation *p_ntn){
if (p_ntn->fund - plcgde * plcgde * 150 >= 0){
p_ntn->fund -= plcgde * plcgde * 150;
plcgde += 1;
p_ntn->plcpeo *= plcgde;
}
return 0;
}
int ofc_tech_def::ugd_amy(class nation *p_ntn){
if (p_ntn->fund - amygde * amygde * 100 >= 0) {
p_ntn->fund -= amygde * amygde * 100;
p_ntn->amypeo *= amygde * amygde * 0.6;
}
return 0;
}
int ofc_tech_def::ugd_spy(class nation *p_ntn){
if (p_ntn->fund - spygde * spygde * 50){
p_ntn->fund -= spygde * spygde * 50;
p_ntn->embezzle *= 0.85;
}
return 0;
}

70
nation.h Normal file
View File

@ -0,0 +1,70 @@
//
// nation.h
// nation_war
//
// Created by Saturneric on 17/1/16.
// Copyright © 2017年 Bakantu Eric. All rights reserved.
//
#ifndef nation_h
#define nation_h
class pdt_tech_def {
int pdtgde;
int fctgde;
int lndgde;
public:
int upd_fct(class nation *p_ntn);
int upd_lnd(class nation *p_ntn);
};
class ofc_tech_def {
int plcgde;
int amygde;
int emogde;
int spygde;
public:
int ugd_plc(class nation *p_ntn);
int ugd_amy(class nation *p_ntn);
int ugd_spy(class nation *p_ntn);
};
class amy_tech_def {
int maxgde;
int eqpgde;
public:
int upd_eqp(class nation *p_ntn);
};
class nation {
public:
int fund;
double embezzle;
double pdteff;
int amyeqp;
int n_id;
int plcpeo;
int amypeo;
int amycst;
int plcoffcst;
int amyoffcst;
int lndplus;
class pdt_tech_def m_ptd;
class ofc_tech_def m_otd;
class amy_tech_def m_atd;
int send_fund(int send);
int set_amy(int sld_num,int mf_num, class land *p_land);
int set_fct(int mpw_num, int pf_num,class land *p_land);
nation(int s_id);
~nation(void);
};
#endif /* nation_h */