Remastering complet du jeu, suppression quasi totale du hasard, partie plus courte, objectifs de victoire clairs

This commit is contained in:
Nicolas H 2019-03-01 11:29:26 +01:00
parent 9a21f42ef0
commit 5f1fd754dd
65 changed files with 77174 additions and 124538 deletions

23
README.md Normal file → Executable file
View File

@ -1,24 +1,24 @@
# SpacePaper
The free 4x paper game designed by Jne[CrAcK]
![logo](https://raw.githubusercontent.com/dahut87/SpacePaper/master/images/logo.png)
## En cours de développement
**Cette version du jeu n'est pas terminée, de nombreuses corrections orthographiques et un équilibre du jeu est nécessaire avant que le jeu soit pleinement jouable.**
**Cette version du jeu est en cours de test. De nombreuses corrections orthographiques et un équilibrage du jeu est nécessaire avant que le jeu soit pleinement jouable.**
**Les nouvelles règles sont en cours d'écriture**
## Création
SpacePaper est né le 7 juin 2018 dans lesprit dun trentenaire fanatique de jeux de plateau (Projet Gaïa et Terra Mystica) et de jeux vidéos 2x et 4x (exploration, expansion, exploitation et extermination). Lidée de base était de calquer la profondeur stratégique dun jeux vidéo 4x sur un jeux de plateau tout en gardant la possibilité de pouvoir limprimer aisément sur du simple papier coloré. Seul un dé et quelques marqueurs (cailloux ou pions) seront utiles pour jouer.
Spacepaper est né le 7 juin 2018 dans lesprit dun trentenaire fanatique de jeux de plateau et de jeux vidéos 2x et 4x (exploration, expansion, exploitation et extermination). Lidée de base était de calquer la profondeur stratégique dun jeux vidéo 4x sur un jeux de plateau tout en gardant la possibilité de pouvoir limprimer aisément sur du simple papier coloré. Seul quelques jetons colorés (cailloux ou pions) seront utiles pour jouer.
## Licence et gratuité [![Licence Creative Commons CC-BY-NC-SA](https://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png)](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.fr)
SpacePaper est gratuit et il peut être modifié (règle et visuel) et republié sous un autre nom du moment que le nom SpacePaper apparaît quelque part dans le titre, ex : « SpacePaper, un nouvel horizon » ou « SpacePaper II ». Il ne doit en aucun cas faire lobjet de commerce ou de toute autre activité lucrative que ce soit.
Spacepaper est gratuit et il peut être modifié (règle et visuel) et republié sous un autre nom du moment que le nom Spacepaper apparaît quelque part dans le titre, ex : « Spacepaper, un nouvel horizon » ou « Spacepaper II ». Il ne doit en aucun cas faire lobjet de commerce ou de toute autre activité lucrative que ce soit.
Vous pouvez êtes donc libre de limprimer et dy jouer en tout sérénité sans vous acquitter de la moindre somme dargent.
## Lunivers SpacePaper
## Lunivers Spacepaper
SpacePaper se déroule en 2120 après J.C, à laube du voyage interstellaire. Plusieurs races sont sur le point de partir à la conquête de notre galaxie. Ainsi, les Terriens, les Ethers, les Vulcains, les Kelvins et les Mécas se préparent à lancer leurs premiers vaisseaux vers de nouveaux systèmes planétaires. Le jeu est basé sur 3 ressources stratégiques à optimiser (recherche, énergie et or) ainsi que 3 ressources minières (antimatière, oganesson, corindon) dimportance mineure. Cest un jeu de 2 à 5 joueurs dans lequel l'immensité du plateau de jeu devient rapidement écrasante ! A vous de manier correctement les 10 systèmes politiques afin d'assurer la stabilité et la prospérités de vos colonies. Le choix dun des 10 dirigeants proposés conditionnera de façon importante lorientation de votre partie. A bord de 3 types de
vaisseaux (transport, croiseur, éclaireur), vous découvrirez les 37 objets célestes différents qui peuplent lunivers au fur et à mesure de votre progression. 90 technologies permettent de développer votre civilisation dans 4 grandes disciplines : déplacement, combat, habitabilité et économie. Vous arpentez la galaxie en recherche de la fortune, de la connaissance, de conquêtes, de combats afin de vous mener vers la victoire (conditions de victoires différentes).
Spacepaper se déroule en 2120 après J.C, à laube du voyage interstellaire. Plusieurs races sont sur le point de partir à la conquête de notre galaxie. Ainsi, les Terriens, les Ethers, les Vulcains, les Kelvins et les Mécas se préparent à lancer leurs premiers vaisseaux vers de nouveaux systèmes planétaires. Le jeu est basé sur 2 ressources stratégiques à optimiser (science, culture) ainsi que 3 ressources minières dimportance mineure (or, uranium et acier). Cest un jeu de 2 à 4 joueurs dans lequel l'immensité du monde à explorer devient rapidement écrasante ! A vous de manier correctement les 10 systèmes politiques afin d'assurer la stabilité et la prospérités de vos colonies. A bord de 3 types de vaisseaux (transport, croiseur, chasseur), vous découvrirez les 6 types de planète qui peuplent lunivers au fur et à mesure de votre progression. 6 orientations technologiques vous permettrons de développer votre civilisation dans 3 grandes disciplines : déplacement, combat, politico-économique. Vous arpenterez la galaxie en recherche de fortune, de connaissance afin de de voguer progressivement vers la victoire !
## Imprimer le jeu
@ -28,9 +28,10 @@ Pour imprimer le jeux il faut se rendre en fin de ce manuel pour trouver les pla
**Le ficher final.pdf contient le jeu ainsi que les règles.**
* création - avant la création du jeu, calculs d'équilibrage & probabilités...
* planches - les plateaux, tables et marqueurs au format INKSCAPE
* pdf - les version prête à être imprimée au format PDF
* images - images utilisées
* polices - polices de caractère utilisées
* planches - les plateaux, tables, tuiles et marqueurs au format INKSCAPE
* pdf - les version prêtes à imprimer au format PDF
* photos - quelques photos d'illustration
* plateau - le plateau principal
* règles - les règles du jeu au format ODT

View File

@ -1,185 +0,0 @@
from random import *
def proba2D6(seuil):
liste = [1.0/36,2.0/36,3.0/36,4.0/36,5.0/36,6.0/36,5.0/36,4.0/36,3.0/36,2.0/36,1.0/36]
try:
index=seuil.index('-')
bas=int(seuil[0:index])
haut=int(seuil[index+1:])
except:
bas=haut=int(seuil)
return sum(liste[bas-2:haut-1])
def getseuil(seuil):
try:
index=seuil.index('-')
bas=int(seuil[0:index])
haut=int(seuil[index+1:])
except:
bas=haut=int(seuil)
return (bas,haut)
def lance():
return randint(1,6)+randint(1,6)
def getresult(de,liste):
for seuil,result in liste.iteritems():
seuils = getseuil(seuil)
if de>=seuils[0] and de<=seuils[1]:
return result
def makedict():
dict = {}
for i in range(2,13):
for j in range(i+1,13):
seuil=str(i)+'-'+str(j)
proba=round(proba2D6(seuil),3)
#print "%d-%d : %s %f" % (i,j,seuil,proba)
if dict.has_key(proba):
dict[proba].append(seuil)
else:
dict[proba]=[seuil]
for i in range(2,13):
seuil=str(i)
proba=round(proba2D6(seuil),3)
#print "%d-%d : %s %f" % (i,j,seuil,proba)
if dict.has_key(proba):
dict[proba].append(seuil)
else:
dict[proba]=[seuil]
dict[0]=['0']
return dict
def mini(liste):
result=[]
for i in range(len(liste)):
result.append(liste[i][1])
return result
def closeast(values,liste):
final = []
for i in range(len(values)):
prop = []
for j in range(len(liste)):
prop.append((abs(values[i]-liste[j]),liste[j]))
final.append(sorted(prop))
return final
def tester(liste):
somme=sum(liste)
if abs(somme-1.0)>0.001:
print "ERREUUUUUUR : %f" % (somme)
exit()
def least(liste,indices):
mini=1
column=-1
for i in range(len(liste)):
if liste[i][indices[i]][0]<mini:
mini=liste[i][indices[i]][0]
column=i
return column
def testlist(liste,indices):
sum=0
for i in range(len(liste)):
sum=liste[i][indices[i]][1]+sum
return sum
def testdicelist(liste):
full=[0]*11
for i in range(len(liste)):
if liste[i]!='0':
seuils=getseuil(liste[i])
#print seuils
for j in range(seuils[0]-2,seuils[1]-1):
if full[j]==0:
full[j]=1
else:
return False
#print full
if sum(full)==11:
return True
else:
return False
def returnlist(liste,indices):
list=[]
for i in range(len(liste)):
list.append(liste[i][indices[i]][1])
return list
def closeastlist(liste,resultats):
indices=[0]*len(liste)
near=closeast(liste,resultats)
#print near
while abs(testlist(near,indices)-1.0)>0.0011:
print "Somme:%f, proche:%d" % (abs(testlist(near,indices)-1.0),least(near,indices))
print indices
retenue=True
for i in range(0,len(indices)):
if retenue:
indices[i]=indices[i]+1
if indices[i]==len(resultats):
indices[i]=0
retenue=True
else:
break
if len(resultats) in indices:
print "impossible !"
exit()
#print "Somme:%f, proche:%d" % (testlist(near,indices),least(near,indices))
list=returnlist(near,indices)
return list
def brutlist(liste,dict):
tester(liste)
resultats=list(dict)
resultats.sort()
#print resultats
liste=closeastlist(liste,resultats)
print "Approche probabiliste"
print liste
proba=[]
for i in range(len(liste)):
proba.append(dict[liste[i]])
print "Arrangements possibles"
print proba
#raw_input("...")
indices=[0]*len(liste)
test=[]
for i in range(len(liste)):
test.append(proba[i][indices[i]])
print "Solutions"
while True:
if testdicelist(test):
print test
retenue=True
for i in range(0,len(indices)):
if retenue:
if i==len(indices)-1:
print "fin des solutions"
exit()
indices[i]=indices[i]+1
if indices[i]==len(proba[i]):
indices[i]=0
retenue=True
else:
break
test=[]
for i in range(len(liste)):
test.append(proba[i][indices[i]])
#print test
import sys
if len(sys.argv)<2:
print "Manque argument: liste a atteindre"
exit()
liste= sys.argv[1].split(",")
for i in range(len(liste)):
liste[i]=float(liste[i])
dict=makedict()
#print dict
essai=brutlist(liste,dict)
print essai

View File

@ -1,124 +0,0 @@
from random import *
def proba2D6(seuil):
liste = [1.0/36,2.0/36,3.0/36,4.0/36,5.0/36,6.0/36,5.0/36,4.0/36,3.0/36,2.0/36,1.0/36]
try:
index=seuil.index('-')
bas=int(seuil[0:index])
haut=int(seuil[index+1:])
except:
bas=haut=int(seuil)
return sum(liste[bas-2:haut-1])
def getseuil(seuil):
try:
index=seuil.index('-')
bas=int(seuil[0:index])
haut=int(seuil[index+1:])
except:
bas=haut=int(seuil)
return (bas,haut)
def testdicelist(liste):
full=[0]*11
for i in range(len(liste)):
if liste[i]!='0':
seuils=getseuil(liste[i])
#print seuils
for j in range(seuils[0]-2,seuils[1]-1):
if full[j]==0:
full[j]=1
else:
return False
#print full
if sum(full)==11:
return True
else:
return False
def lance():
return randint(1,6)+randint(1,6)
def getresult(de,liste):
for seuil,result in liste.iteritems():
seuils = getseuil(seuil)
if de>=seuils[0] and de<=seuils[1]:
return result
lancer=1000000
prob=0
print "Evaluations statistiques sur %d lances" % lancer
etoiles={'2':'Naine Brune','6-7':'Naine Rouge','8-9':'Naine Jaune','3-4':'Geante rouge','5':'Geante bleue','11':'Super geante R','12':'Etoile double','10':'Trou noir'}
types={
'Naine Brune': {'2':'Tellurique','10-12':'Gazeuse','5-7':'Gelee','4':'Oceanique','8-9':'Sterile','3':'Lave','0':'Vivante'},
'Naine Rouge': {'11-12':'Tellurique','9-10':'Gazeuse','6-7':'Gelee','8':'Oceanique','2-4':'Sterile','5':'Lave','0':'Vivante'},
'Naine Jaune': {'7-8':'Tellurique','10':'Gazeuse','9':'Gelee','5-6':'Oceanique','3-4':'Sterile','11-12':'Lave','2':'Vivante'},
'Geante rouge': {'10-12':'Tellurique','5-6':'Gazeuse','3':'Gelee','4':'Oceanique','9':'Sterile','7-8':'Lave','2':'Vivante'},
'Geante bleue': {'12':'Tellurique','5-6':'Gazeuse','3':'Gelee','4':'Oceanique','7-8':'Sterile','9-11':'Lave','2':'Vivante'},
'Super geante R': {'11':'Tellurique','2-4':'Gazeuse','0':'Gelee','12':'Oceanique','5':'Sterile','6-10':'Lave','0':'Vivante'},
'Etoile double': {'2-4':'Tellurique','5-6':'Gazeuse','8-9':'Gelee','10':'Oceanique','7':'Sterile','11-12':'Lave','0':'Vivante'}}
nombres={
'Naine Brune': {'5-8':1,'9-11':2,'4':3,'3':4,'2':5,'12':6},
'Naine Rouge': {'11-12':1,'5-6':2,'7-8':3,'9-10':4,'3-4':5,'2':6},
'Naine Jaune': {'12':1,'2-3':2,'4-5':3,'6-7':4,'8-9':5,'10-11':6},
'Geante rouge': {'8-9':1,'6-7':2,'2-5':3,'10-11':4,'12':5,'0':6},
'Geante bleue': {'6-7':1,'8-10':2,'2-5':3,'11-12':4,'0':5,'0':6},
'Super geante R': {'7-11':1,'2-6':2,'12':3,'0':4,'0':5,'0':6},
'Etoile double': {'2-3':1,'4-5':2,'6-7':3,'8-9':4,'10-11':5,'12':6}}
probabilite={}
allplanet=0
print "Verification des intervals..."
print "Recapitulatif \t %s" % (testdicelist(list(etoiles)))
for type in list(types):
print "%s \t %s : %s" % (type,testdicelist(list(types[type])),testdicelist(list(nombres[type])))
raw_input("...")
for i in range(lancer):
de=lance()
result_etoile=getresult(de,etoiles)
print "**************** \nDetermination etoile...%d : %s" % (de,result_etoile)
prob="1."+result_etoile;
if probabilite.has_key(prob):
value=probabilite[prob]
probabilite[prob]=value+1
else:
probabilite[prob]=1
if result_etoile!="Trou noir":
de=lance()
result_nombre=getresult(de,nombres[result_etoile])
print "Determination taille...%d : %s" % (de,result_nombre)
prob="2."+str(result_nombre);
if probabilite.has_key(prob):
value=probabilite[prob]
probabilite[prob]=value+1
else:
probabilite[prob]=1
allplanet=allplanet+result_nombre
for j in range(result_nombre):
de=lance()
result_type=getresult(de,types[result_etoile])
print " Determination type...%d : %s" % (de,result_type)
prob="3."+result_type;
if probabilite.has_key(prob):
value=probabilite[prob]
probabilite[prob]=value+1
else:
probabilite[prob]=1
resultats=list(probabilite)
resultats.sort()
print resultats
for i in range(len(resultats)):
if resultats[i][0]=='3':
proba=probabilite[resultats[i]]/float(allplanet)*100.0;
else:
proba=probabilite[resultats[i]]/float(lancer)*100.0;
print " Caracteristique %s : %d, %f" % (resultats[i],probabilite[resultats[i]],proba)

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.6 MiB

BIN
final.pdf

Binary file not shown.

BIN
images/espace.svg.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

BIN
images/info.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
images/logo.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
images/warning.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 842 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.3 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 179 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 110 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 411 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 314 KiB

2798
planches/civilisation1.svg Executable file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 278 KiB

2856
planches/civilisation2.svg Executable file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 268 KiB

2799
planches/civilisation3.svg Executable file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 283 KiB

2834
planches/civilisation4.svg Executable file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 278 KiB

2822
planches/civilisation5.svg Executable file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 390 KiB

2771
planches/civilisation6.svg Executable file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 264 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 180 KiB

After

Width:  |  Height:  |  Size: 251 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.0 MiB

After

Width:  |  Height:  |  Size: 2.0 MiB

30351
planches/espace.svg Executable file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 3.6 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.0 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 606 KiB

After

Width:  |  Height:  |  Size: 574 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 722 KiB

After

Width:  |  Height:  |  Size: 263 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 444 KiB

1895
planches/fin1.svg Executable file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 351 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.8 MiB

After

Width:  |  Height:  |  Size: 358 KiB

5730
planches/fin3.svg Normal file → Executable file

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 448 KiB

After

Width:  |  Height:  |  Size: 303 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.4 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 565 KiB

After

Width:  |  Height:  |  Size: 369 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 321 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.1 MiB

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 MiB

12126
plateau/plateau.svg Normal file → Executable file

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.8 MiB

After

Width:  |  Height:  |  Size: 1.6 MiB

BIN
polices/Megatron Hollow.otf Executable file

Binary file not shown.

BIN
polices/Megatron.otf Executable file

Binary file not shown.

BIN
règles/spacepaper.odt Normal file → Executable file

Binary file not shown.