|
|
|
|
|
|
June 03
Primero Descarge El Reproductor Aqui
Para Complacencias, Solo Agregennos A peuttyboy_ca@hotmail.com
Y Si Nos Quieren Escuchar En Cualquier Otro Reproductor, Solo Aprieten Ctrl + U, Y Agregen Esta Direccion http://201.120.41.170:8000
GRACIAS
April 22 4.11.
room_info_players205RRRR2104091
room_info_players(gameId, roomId, short=0,access=’’)
That function is used to look for players playing at given room
|
gameId
|
That parameters describe game that we are interested in
|
|
roomId
|
Room number
|
|
short
|
Data returned by that function can be either in short of
long form
|
|
access
|
If set we use access field from
room configuration – when admins check is not checked only requests
with valid access code will get extra data about admins in the room
|
Function return list of players at the tables. Each player
has state flag – 0 means player does not play, 1 –he.she play at one table, 2
he/she plays at two or more tables.
|
That function returns eg, for query room_info_players(game27,0,0)
room_info_players =
{
ret
= 1
count
= 1
tbl
=
{
0
=
{
name
= wwylon1972
state
= 0
}
}
}
And for for query: action=
room_info_players(game27,0,1)
room_info_players =
{
ret
= 1
count
= 1
tbl
= 0 wwylon1972
}
|
4.12.
player_results
player_results(player,gameId,ranking=0,ladder=0,short=0)
That function is used to look for player results. If game
has ranking and ladder – you can retrieve ranking change for given player(user).
|
player
|
Login of player
|
|
gameId
|
That parameters describe game that we are interested in
|
|
ranking
|
Set tit to 1 to get ranking change
|
|
ladder
|
Set tit to 1 to get ladder change
|
|
short
|
Short format of returned ranking/ladder date
|
|
That function returns eg, for query room_info_players(game27,0,0)
player_results =
{
ret
= 1
tbl
=
{
RF
=
{
desc
= Rating
val = 0
}
games_completed
=
{
desc
= Games Completed
val = 0
}
games_abandoned
=
{
desc
= Games Abandoned
val = 0
}
wins
=
{
desc
= Wins
val = 0
}
loses
=
{
desc
= Loses
val = 0
}
streak
=
{
desc
= Streak
val = 0
}
max_break
=
{
desc
= Max Break
val = 0
}
}
ranking_count
= 9
ranking
= 5034|5049|4987|4974|4961|4948|4948|4961|4948
ladder_count
= 9
ladder
= 3|3|3|3|3|3|3|2|3
|
4.13.
player_archive
player_archive(player,gameId, start=0,count=100)
That function is used to look for games played by player
|
player
|
Login of player
|
|
gameId
|
That parameters describe game that we are interested in
|
|
start
|
Start from that position
|
|
count
|
Get so much fields
|
|
That function returns eg, for player_archive(Object,game27,0,3)
player_archive =
{
ret
= 1
count
= 3
tbl
=
{
0
=
{
date_end
= 2004-01-24 22:29:37
game_time
= 14
login
= Object;samuel
winner
= 0;1
rating
= 0;0
ladder
= 0;0
rated_game
= 0
end_mode
= resign
max_break
= 0;0
old_rating
= 0;0
old_ladder
= 0;0
}
1
=
{
date_end
= 2004-01-24 22:26:47
game_time
= 71
login
= Object;bromba
winner
= 0;1
rating
= 0;0
ladder
= 0;0
rated_game
= 0
end_mode
= resign
max_break
= 0;1
old_rating
= 0;0
old_ladder
= 0;0
}
2
=
{
date_end
= 2004-01-09 11:55:22
game_time
= 124
login
= Besti;Object
winner
= 1;0
rating
= 0;0
ladder
= 0;0
rated_game
= 0
end_mode
= disconnect
max_break
= 0;0
old_rating
= 0;0
old_ladder
= 0;0
}
}
}
|
4.14.
player_opponents
player_opponents(player,game,sort='',start=0,count=10,opponent='')
That function is used to look for player opponents.
|
player
|
Login of player
|
|
gameId
|
That parameters describe game that we are interested in
|
|
sort
|
How should we sort results
|
|
start
|
Start from that position
|
|
count
|
Get so much fields
|
|
opponent
|
Name of the opponent that we look for
|
W – means wins
L -
means loses
D -
means draws
|
That function returns eg, for player_opponents(Object,game22,,0,10)
player_opponents =
{
ret
= 1
count
= 3
start
= 0
tbl
=
{
0
=
{
login2
= bromba
w
= 5
l
= 1
d
= 0
}
1
=
{
login2
= nexti
w
= 1
l
= 0
d
= 0
}
2
=
{
login2
= samuel
w
= 6
l
= 24
d
= 0
}
}
}
|
4.15. private_room
Deprecated – not available
4.6.
room_info
room_info(gameId,filter,fields,sort=’’)
Basic function to retrieve info about rooms for given game at the server
|
gameId
|
That parameters describe game that we are interested in
|
|
filter
|
That field will be used to limit searches to one kind of
rooms.
Eg. we can fetch only rooms with admin.
You can use following params: priv, admin,
name of languages(eg. English), type of player, vip.
These options can be joined with |.! signs.
| - logical or eg. admin|priv will fetch data for
private or rooms with admins.
! – logical not eg.!admin will fetch data
for private or rooms with admins,
. – logical and eg admin.vip will return all
games that are for vip and has admins.
Examples
Vip – vip rooms
!vip – remaining(not vip rooms)
private – private rooms
!private – not private (public) rooms
You can also add additional
terms eg.
!private.vip – not private rooms for vip
!private.!vip – not private rooms for not vip (other players)
!private.!vip.admin – not private rooms for not vip with admin
!private.!vip.!admin – not private rooms for not vip without admin
You can go even further if you use |
Eg.
!private.vip.admin|private – not private rooms for vip with admin + all private rooms.
|
|
fields
|
That parameters describe games that we want to get. In
that way we can optimize query. Available queries:
|
*
|
We should get all fields for rooms
|
|
All
|
We should get all fields for rooms
|
|
Id
|
Internal id for room
|
|
Name
|
Name of the room
|
|
Status
|
Status of the room – currently we have two flags that can appear here: admin and priv
|
|
Players
|
number of players at room
|
|
Max
|
max. number of players (there are cases that there is
more than max number of players at room (reconnection of disconnected
players)
|
|
|
Sort
|
Returned table can be sorted by different parameters
(remember that only by one of returned parameters. Eg: When we sort game by players|name
– we will get data sorted first by number of players and then by name.
If before sort field there is ! – we reverse sort. Eg.
!players|name will first sort descending by number of players and
than by game name.
|
|
That function returns eg, for query room_info(game27,admin,*):
room_info =
{
ret
= 1
count
= 4
tbl
=
{
0
=
{
id
= 0
name
= Best Friends
status
= admin
players
= 2
max
= 100
}
1
=
{
id
= 1
name
= Pool Party
status
= admin
players
= 0
max
= 100
}
2
=
{
id
= 2
name
= The Deep End
status
= admin
players
= 0
max
= 100
}
3
=
{
id
= 3
name
= Dust In The Wind
status
= admin
players
= 0
max
= 100
}
}
}
|
4.7.
ranking
Ranking(gameId,secondary='',count=10,start=0,sortBy='')
That function retrieves info about ranking for one game
|
gameId
|
That parameters describe game that we are interested in
|
|
secondary
|
That parameter is used by some games:
·
In single word games it is used to select language,
·
In solitaires – to select variant,
·
In pinballs – to select mode
·
In jungle hunter – to select room
|
|
count
|
How many record do we want to retrieve
|
|
start
|
From that position we want to start
|
|
sortBy
|
Rankings for most games (except solitaires,pinballs and
jungle hunter) can be sorted by different param. You can select here used
param. Eg. if for snooker you will use RF – rankings will be sorted
descending by ranking, if you use !RF – rankings will be sorted ascending by
ranking.
|
That function returns both data and description for it.
|
That function returns eg, for query ranking(game4,0):
ranking =
{
ret
= 1
desc
=
{
rating
=
{
0
= R
1
= Rating
}
games_completed
=
{
0
= GC
1
= Games Completed
}
games_abandoned
=
{
0
= GA
1
= Games Abandoned
}
wins
=
{
0
= W
1
= Wins
}
loses
=
{
0
= L
1
= Loses
}
}
count
= 3
ranking
=
{
0
=
{
playerId
= 372
login
= Object
rating
= 4991
games_completed
= 6
games_abandoned
= 1
wins
= 0
loses
= 6
}
1
=
{
playerId
= 375
login
= bromba
rating
= 4984
games_completed
= 1
games_abandoned
= 1
wins
= 0
loses
= 1
}
2
=
{
playerId
= 373
login
= samuel
rating
= 4935
games_completed
= 6
games_abandoned
= 4
wins
= 5
loses
= 1
}
}
}
|
4.8.
ranking_find
RankingFind(gameId,name,sortBy='')
That function is used to look for player at ranking page.
|
gameId
|
That parameters describe game that we are interested in
|
|
name
|
Name(login) of searched user.
|
|
sortBy
|
Rankings for most games (except solitaires,pinballs and
jungle hunter) can be sorted by different param. You can select here used
param. Eg. if for snooker you will use RF – rankings will be sorted
descending by ranking, if you use !RF – rankings will be sorted ascending by
ranking.
|
|
That function returns eg, for query action= ranking_find(game4,bromba)
ranking_find =
{
ret
= 1
pos
= 2
}
|
4.9.
ladder
Deprecated – not available
4.10. ladder_find
Deprecated – not available
GameDesire Interface
© Ganymede Technologies s.c.
ver. 2.07 2004-03-31
1. Changes
Ver.2.08 – 2006-08-29
- Changed room_info_players(game,room,short=0,access=’’)
– now info about administration privilidges is exported
Ver.2.07- 2004-03-19
- Added command room_info_players(game,room,short=0) - it returns player that are at rooms.
- Added command player_results(player,game,ranking=0,ladder=0,short=0)
– it gets results for player.
- Added command player_archive(player,game,start=0,count=10)
– it gets archived games for player.
- Added command player_oponents(player,game,sort='',start=0,count=10,oponent='')
– it gets opponents for player.
- Added command private_room(game,room_name) - create private room.
- Fixed problems with format for XML.
- Limited length of user name (login) to 12 chars.
Ver.2.06
- Added profiling – testing how fast given command happens.
- Added mmcache support.
Ver.2.05
- Added bank function. Added protection (passwd,IP)
for vip function.
- Remove type from register (you can use aff instead).
Ver.2.04
- Changed params for ranking , ladder
Ver.2.03
- New format of command register. Now if you want to
register someone you need to provide passwd. Interface also check IP
address that you use. Since now aff <2 are reserved, aff=2 is used for
test purposes, aff>2 is used for our partners
- Logout removed
Ver 2.01
- Changed format of game_info and room_info,
now you can filter params.
Ver.2.00
- Added support for additional languages: Polish, German,
Turkish, Danish, Dutch, Finnish, Portuguese, Slovenian, Swedish. Of course
site have to yet translated to work with these languages…
- New format of command register(nick,passwd[,type]) third
parameter is used to distinguish between different types of users.
- Added command vip(nick,expiration),
- Added sorting parameters for room_info and game_info
commands,
- Added new commands ranking, ladder, ranking_find,
ladder_find
- Modified login system,
- Status renamed to info. Status returns
now some global parameters about games.
Ver.1.00
2. Code
integration
Basically there are some methods to integrate portal.
In order to help integration we prepared some additional
code.
We wanted to keep it minimal and maximally functional. We
intend to add some methods to fetch statistics for games (rankings/ladders
etc/). If you think that something is missing – send us a note. If you want
different format of exported data – also.
Basically we assume that that module can be used in two
different modes.
a) Serves should be able to get data from our servers and next generate pages from that data
b) Clients
(html files) should be able to generate (with javascript) pages.
3. How
to get data from servers
To get data from the servers you should use file: interface.php
Eg:
http://server_addres.com/ interface.php?aff=2&mode=xml&action=game_info(game20,name|icon)
retrieve name and name of icon for the game that has
internal number 20
Basically after the interface.php?
following (separated by &)
params can exist
|
Param
|
Description
|
Example
|
|
aff
|
Interface number (used to distinguish affiliate players
and to gather statistics).
Caution number <2 are reserved for internal use. Number
2 is reserved for development (time to time all users created with that
number will be delete from database. Numbers > 2 are for our partners.
|
aff=3
|
|
passwd
|
Interface password - necessary when user use register
command
|
passwd= 6f683dbd31538752b6bb59c28bedb46d
|
|
lng
|
Change used language. Available languages:
- English
- German
- Turkish
- Danish
- Dutch
- Finnish
- Portuguese
- Slovenian
- Swedish
- Spanish
- Russian
You can also use numeric values as used on GameDesire web
site (Some of these languages are defined, but currently yet not available).
|
lng=german
|
|
mode
|
How the result of query are given back. Available formats:
If there will be any other format necessary please contact
with us.
|
mode=js
|
|
action
|
It is used to query data – more detailed description below
|
action=game_info(game20,name|icon)
|
3.1.
Action param
As a parameter for action we have list of queries.
Queries are separated by;
So valid parameters are:
game_info(game20,name|icon)
game_info(game20,name|icon);room_info(game20,*,*,*)
Each query has format:
ret:fun(params)
|
Ret
|
values that should keep the result of query – if
omitted we use fun as the value to keep return from query
|
|
Fun
|
One of available functions for queries
|
|
params
|
params for function – they
are separated by commas
|
3.2.
Password
Some commands are password and Ip protected:
Eg.
http://www.gamedesire.com/interface.php?aff=2&passwd=6f683dbd31538752b6bb59c28bedb46d&action=register(wwylon,wwylonpassword)
In that case we check passwd. If passwd for aff
is not valid = we raport error
We also check IP addresses. If IP address of caller is
different than set for aff number – we raport error.
3.3.
Profile
We added support for profiling – now you can test how long
given calls executed. To get info place add profile=1 to url.
|
Eg.
http://www.gamedesire.com/interface.php?action=info()&aff=2&profile=1
status =
{
ret
= 1
players
= 0
}
profile =
{
time
= 0.0432
}
|
3.4.
MMCache
We added support for mmcache – results of some functions are
cached in mmcache (PHP accelerator and cache). Eg. Results returned by function
game_info. To disable cache for test purposes please use nocache
directive.
Eg.
http://www.gamedesire.com/interface.php?aff=2&action=game_info(filter,fields,sort=’’)&nocache=1
4. Available functions
CAUTION!
Not all functions mentioned in that doc are
available to every of our partners. Some of these functions are used
internally and will not be available to any of our partners. Available
functions are displayed by info.
4.1.
info
info()
it simply returns status of the module + list of available commands.
|
It returns (html format) eg.: for
action=info()
info =
{
ret
= 1
name
= Interface for GameDesire games
copyrights
= Ganymede Technologies s.c www.ganymede.com.pl
www
= www.gamedesire.com
ver = 1.00
commands
=
{
status
= status() - returns status of module (eg. number of players for all games)
info
= info() - returns info of module (eg. info about commands and version of software)
exist_nick
= exist_nick(nick) - checks if nick exists
register
= register(nick,passwd,,id=0) - registers new nick, (email, expiration are
currently unused)
vip = vip(nick,expiration) - expiration:
standard date format, it returns current vip date (so call it with 0
expiration date to get current one)
logout
= logout(nick) - it logout nick
game_info
= game_info(filter,fields,sort='') - it returns info about games; filter =
name | id | group_name | type | all | *; fields = id | eng_name | name | desc
| group | players | icon | is_help | screens | all | *; sort = list of fields
room_info
= room_info(game,filter,fields,sort='') - it returns info about rooms for one
game; filter = *|any|priv|admin|vip|ladder|type|lang; fields = id | name |
status | players | max | all |*; sort = list of fields
ranking =
ranking(gameId,secondary='',page=0,sortBy='') - it returns
ranking;gameId (eg. game27 for snooker); secondary -secondary selector
(for word games - language, for solitaires - solitaire type, etc.);
page - page from start, each page has 10 positions; sortBy - which
field should be used for sorting('!'sign reverse sorting
ranking_find
= ranking_find(gameId,name,sortBy='')- it is used to look for player at
ranking page;
ladder
= ladder(gameId,page=0) - return position on ladder; gameId (eg. game27 for
snooker); page - page from start, each page has 10 positions;
ladder_find
= ladder_find(gameId,playerId) - it is used to look for player at ladder
page;
}
}
|
4.2.
status
status()
Returns some global params about game site: currently only
number of players on the site.
|
It returns (html format) eg.:
status =
{
ret
= 1
players
= 0
}
|
4.3.
exist_nick
exist_nick(nick)
checks if nick exists – is registered
|
It returns (html format) eg.:
exist_nick
=
{
ret
= 1
}
|
4.4.
register
Deprecated – not available
4.4.1.
vip
Deprecated – not available
4.5.
game_info
game_info(filter,fields,sort=’’)
Basic function to retrieve info about all games at the server
|
filter
|
That parameters describe games that we are interested in.
One of following value can be used:
|
*
|
Function should return info about all games
|
|
all
|
Function should return info about all games
|
|
name
|
English name of the game (eg. bridge)
|
|
id
|
internal id of the game – eg. game27 means
snooker
|
|
group
|
Filter for game group – in that way you can fetch games
belonging to only one group
|
These options can be joined with |.! signs.
| - logical or eg. snooker|chess will fetch data
for chess and snooker.
! – logical not eg.!pub will return all
games that do not belong to pub group
. – logical and eg. !pub.single will return
all games that are single player not pub games.
|
|
fields
|
That parameters describe games that we want to get. In
that way we can optimize query. Available queries:
|
*
|
We should get all fields for selected games
|
|
all
|
We should get all fields for selected games
|
|
id
|
Internal Id of the game eg. for snooker we will get 27
|
|
eng_name
|
English name as can be used for range
|
|
name
|
Name of the game (that should be displayed)
|
|
desc
|
Description for the game
|
|
group
|
Groups for the game (separated with | sign)
|
|
players
|
Current number of players for given group
|
|
icon
|
String that should be used to fetch icons
|
|
is_help
|
Bool that describe if we have help of not.
|
|
screens
|
String that should be used to fetch screens from the
game
|
|
start
|
String that should be used to start game
|
As in previous example these options can be joined with |
sign.
|
|
Sort
|
Returned table can be sorted by different parameters
(remember that only by one of returned parameters. Eg: When we sort game by players|name
– we will get data sorted first by number of players and then by name.
If before sort field there is ! – we reverse sort. Eg.
!players|name will first sort descending by number of players and
than by game name.
|
More details how to use that function you will find in point
3.
|
That function returns eg, for query action=game_info(game12|game27,name|start)
game_info =
{
ret
= 1
count
= 2
tbl
=
{
0
=
{
name
= Snooker
start
= n|780|545|Snooker
}
1
=
{
name
= Chess
start
= n|680|545|Chess
}
}
}
|
February 05  1. Introducción
El Billar 8 es un juego para dos jugadores sobre una mesa de billar con
siete bolas de colores lisas (lisas), siete bolas de colores rayadas (rayadas)
y una negra (la número 8). 2. Objetivo del juego
El objetivo de este juego es introducir una por una tu juego de bolas
(lisas o rayadas) dentro de las troneras de la mesa de juego.
Los jugadores usan su taco para tocar la bola blanca. La bola blanca
debe tocar a una bola lisa o rayada e introducirla en una de las seis
troneras.
El primer jugador en introducir su juego de bolas (rayadas o lisas) en
las troneras debe introducir la bola 8 negra en el pocket que haya elegido
para ganar el juego.
3. Alternancia de turnos
Si durante el turno de un jugador, éste introduce una de sus bolas sin
cometer ninguna falta, continúa jugando (ver abajo la lista de faltas)
Si el jugador no consigue meter ninguna de sus bolas, mete una de las bolas
de su oponente o comete alguna falta, entonces pasa el turno.
Si en algún momento un jugador mete la bola blanca accidentalmente (incluso si
ha metido también una de sus bolas), pasa el turno.
Si un jugador mete la bola negra ANTES de meter todas sus bolas, pierde el juego
automáticamente.
4. Inicio del juego
El juego comienza con todas las bolas (excepto la blanca) dentro del triángulo
en un extremo de la mesa. El jugador que va sacar coloca la bola blanca en el extremo
opuesto al triángulo, en cualquier parte del área que comprende desde el extremo hasta
un cuarto de mesa.
El jugador saca golpeando la bola blanca contra la formación en triángulo.
Si durante el saque el jugador mete una bola, puede seguir metiendo ese juego de bolas
el resto del juego o puede empezar a meter el otro juego de bolas.
Si mete bolas de los dos tipos, puede elegir con qué juego de bolas va a seguir durante
el resto del juego.
En otras palabras, no importa cuántas o de qué tipo (rayadas o lisas) meta el jugador durante
el saque. La primera bola que meta el jugador DESPUÉS del saque determina qué tipo de bolas
deberá meter el resto de la partida. 5. Final del juego
Después de que un jugador haya metido todas sus bolas, entonces debe meter la bola negra.
Antes de golpear la bola negra, el juego requerirá al jugador que elija en qué tronera
va a intentar meterla. Si el jugador mete la bola negra en la tronera que había elegido,
gana y acaba el juego. Si mete la negra en cualquier otra tronera distinta a la elegida, pierde
y acaba el juego. Si el jugador no mete la negra en ninguno de las troneras, pierde el turno
y juega el oponente. 6. Faltas
Las faltas son esencialmete movimientos o acciones que conducen a penas contra el jugador
que ha cometido la falta.
-
Cuando un jugador saca para empezar la partida, por lo menos cuatro bolas (sin
incluir la blanca) deben chocar contra los lados de la mesa o por lo menos una
bola distinta a la blanca debe entrar en uno de las troneras. Si menos de cuatro
bolas chocan contra los lados e la mesa y ninguna bola entra en ninguna tronera,
entonces se ha cometido una falta y el oponente tiene tres opciones:
- El adversario puede permitir continuar el juego normalmente,
como si no hubiese ocurrido ninguna falta. Si se elige esta opción,
es el turno del adversario (el que no ha sacado).
- El adversario puede permitir al jugador que ha cometido la falta
recolocar las bolas y volver a romper.
- El adversario puede recolocar las bolas y romper él mismo.
-
Si el jugador que rompa mete la blanca durante el saque, independientemente del
número de bolas que haya metido, ha cometido una falta. Es el turno del adversario,
que ahora puede colocar la bola blanca detrás de la línea que separa el cuarto
inferior de la mesa del resto de la mesa. Desapues de colocar la bola blanca DETRÁS
de la línea, el jugador puede pegar a las bolas que estén DELANTE de la línea.
-
Si, en otro momento, un jugador mete la bola blanca, piede el turno. El adversario
podrá poner la bola blanca EN CUALQUIER LUGAR de la mesa antes de golpearla,
y puede apuntar a cualquiera de sus bolas.
-
Si un jugador mete una de las bolas de su adversario, ha cometido una falta.
El jugador pierde su turno y su adversario tiene el derecho de jugar.
-
Si un jugador mete la bola negra antes de meter las suyas (lisas o rayadas), pierde
instantáneamente y el juego acaba.
-
Si un jugador golpea la bola blanca pero ésta no choca con ninguna otra,
entonces se ha cometido una falta. Pasa el turno al adversario, el cual puede
colocar la bola blanca EN CUALQUIER LUGAR de la mesa antes de golpear.
-
Si un jugador golpea la bola blanca y ésta golpea PRIMERO a una bola del adversario,
se ha cometido una falta, incluso si el jugador ha metido una de sus bolas .
Es el turno del adversario, el cual puede colocar la bola blanca EN CUALQUIER LUGAR
de la mesa antes de golpear.
Nota: Esta falta NO se aplica inmediatamente después del saque. Antes los jugadores han tenido
que que asignarse su juego de bolas (rayadas o lisas).
-
Si un jugador golpea la bola blanca y ésta PRIMERO toca a la negra, se ha cometido
una falta a no ser que la bola negra sea la última bola por meter que le quede a ese
jugador. Es el turno del adversario, el cual puede colocar la bola blanca EN CUALQUIER
LUGAR de la mesa antes de golpear.
- Siempre el jugador debe tratar de que la bola blanca golpee directa o indirectamente
con al menos una de sus bolas, de lo contrario comete una falta.
-
Siempre la bola que haya sido tocada primero por la bola blanca debe entrar en una
tronera, tocar al menos uno de los lados de la mesa o hacer que alguna otra bola (incluída
la blanca) directa o indirectamente entre en una tronera o toque algún lado de la mesa (banda).
Si ninguna de esas cosas ocurre, se ha cometido una falta y es el turno del adversario,
el cual puede colocar la bola blanca EN CUALQUIER LUGAR de la mesa antes de golpear.
- Si el jugador, después de meter todas sus bolas, mete la bola negra en un pocket
diferente al que había nombrado, pierde y acaba la partida.
-
Si un jugador mete su última bola y la bola negra a la vez, comete una falta y el jugador
automáticamente pierde la partida.

|