Pig the dice game: Difference between revisions

m
(Added Yabasic)
 
(6 intermediate revisions by 5 users not shown)
Line 724:
}
</syntaxhighlight>
 
=={{header|BASIC}}==
==={{header|Applesoft BASIC}}===
{{trans|Chipmunk Basic}}
<syntaxhighlight lang="qbasic">100 NJ = 2
110 MP = 100
120 DIM APT(3)
130 APT(1) = 1
140 APT(2) = 1
150 HOME
160 PRINT "The game of PIG"
170 PRINT "===============";CHR$(13);CHR$(10)
180 PRINT "Si jugador saca un 1, no anota nada y se convierte en el turno del oponente."
190 PRINT "Si jugador saca 2-6, se agrega al total del turno y su turno continua."
200 PRINT "Si jugador elige 'mantener', su total de puntos se anade a su puntuacion,";
210 PRINT " y se convierte en el turno del siguiente jugador.";CHR$(10)
220 PRINT "El primer jugador en anotar 100 o mas puntos gana.";CHR$(13);CHR$(10)
230 FOR J = 1 TO 2
250 PT = 0
260 IF APT(J) > MP THEN GOTO 370
270 PRINT
280 PRINT "j";J;": (";APT(J);",";PT;")";
290 INPUT " Tirada? (Sn) ";NT$
300 IF NT$ = "S" OR NT$ = "s" THEN GOTO 400
310 REM opcion N
320 APT(J) = APT(J)+PT
330 PRINT " Te quedas con: ";APT(J)
340 IF APT(J) >= MP THEN PRINT CHR$(10);"Gana el j";J;" con ";APT(J);" puntos." : END
350 GOTO 370
360 GOTO 260
370 NEXT J
380 GOTO 230
390 END
400 REM opcion S
410 TIRA = INT(RND(1)*5)+1
420 PRINT " tirada:";TIRA
430 IF TIRA = 1 THEN PRINT CHR$(10);"!Pierdes tu turno! j";J;" pero mantienes tu puntuacion anterior de ";APT(J) : GOTO 370
440 PT = PT+TIRA
450 GOTO 360</syntaxhighlight>
 
==={{header|GW-BASIC}}===
{{works with|PC-BASIC|any}}
{{works with|BASICA}}
The [[#MSX_BASIC|MSX BASIC]] solution works without any changes.
 
==={{header|IS-BASIC}}===
<syntaxhighlight lang="is-basic">100 PROGRAM "Pig.bas"
110 RANDOMIZE
120 STRING PLAYER$(1 TO 2)*28
130 NUMERIC POINTS(1 TO 2),VICTORY(1 TO 2)
140 LET WINNINGSCORE=100
150 TEXT 40:PRINT "Let's play Pig!";CHR$(241):PRINT
160 FOR I=1 TO 2
170 PRINT "Player";I
180 INPUT PROMPT "Whats your name? ":PLAYER$(I)
190 LET POINTS(I)=0:LET VICTORY(I)=0:PRINT
200 NEXT
210 DO
220 CALL TAKETURN(1)
230 IF NOT VICTORY(1) THEN CALL TAKETURN(2)
240 LOOP UNTIL VICTORY(1) OR VICTORY(2)
250 IF VICTORY(1) THEN
260 CALL CONGRAT(1)
270 ELSE
280 CALL CONGRAT(2)
290 END IF
300 DEF TAKETURN(P)
310 LET NEWPOINTS=0
320 SET #102:INK 3:PRINT :PRINT "It's your turn, " PLAYER$(P);"!":PRINT "So far, you have";POINTS(P);"points in all."
330 SET #102:INK 1:PRINT "Do you want to roll the die? (y/n)"
340 LET KEY$=ANSWER$
350 DO WHILE KEY$="y"
360 LET ROLL=RND(6)+1
370 IF ROLL=1 THEN
380 LET NEWPOINTS=0:LET KEY$="n"
390 PRINT "Oh no! You rolled a 1! No new points after all."
400 ELSE
410 LET NEWPOINTS=NEWPOINTS+ROLL
420 PRINT "You rolled a";ROLL:PRINT "That makes";NEWPOINTS;"new points so far."
430 PRINT "Roll again? (y/n)"
440 LET KEY$=ANSWER$
450 END IF
460 LOOP
470 IF NEWPOINTS=0 THEN
480 PRINT PLAYER$(P);" still has";POINTS(P);"points."
490 ELSE
500 LET POINTS(P)=POINTS(P)+NEWPOINTS:LET VICTORY(P)=POINTS(P)>=WINNINGSCORE
510 END IF
520 END DEF
530 DEF CONGRAT(P)
540 SET #102:INK 3:PRINT :PRINT "Congratulations ";PLAYER$(P);"!"
550 PRINT "You won with";POINTS(P);"points.":SET #102:INK 1
560 END DEF
570 DEF ANSWER$
580 LET K$=""
590 DO
600 LET K$=LCASE$(INKEY$)
610 LOOP UNTIL K$="y" OR K$="n"
620 LET ANSWER$=K$
630 END DEF</syntaxhighlight>
 
==={{header|MSX Basic}}===
{{works with|MSX BASIC|any}}
{{works with|GW-BASIC}}
<syntaxhighlight lang="qbasic">100 NJ = 2
110 MP = 100
120 DIM APT(3)
130 APT(1) = 1
140 APT(2) = 1
150 CLS
160 PRINT "The game of PIG"
170 PRINT "===============";CHR$(13);CHR$(10)
180 PRINT "Si jugador saca un 1, no anota nada y se convierte en el turno del oponente."
190 PRINT "Si jugador saca 2-6, se agrega al total del turno y su turno continua."
200 PRINT "Si jugador elige 'mantener', su total de puntos se anade a su puntuacion,";
210 PRINT " y se convierte en el turno del siguiente jugador.";CHR$(10)
220 PRINT "El primer jugador en anotar 100 o mas puntos gana.";CHR$(13);CHR$(10)
230 'while
240 FOR J = 1 TO 2 'nj
250 PT = 0
260 IF APT(J) > MP THEN GOTO 370
270 PRINT
280 PRINT "j";J;": (";APT(J);",";PT;")";
290 INPUT " Tirada? (Sn) ";NT$
300 IF NT$ = "S" OR NT$ = "s" THEN GOTO 400
310 REM opcion N
320 APT(J) = APT(J)+PT
330 PRINT " Te quedas con: ";APT(J)
340 IF APT(J) >= MP THEN PRINT CHR$(10);"Gana el j";J;"con";APT(J);"puntos." : END
350 GOTO 370 'exit while
360 GOTO 260
370 NEXT J
380 GOTO 230
390 END
400 REM opcion S
410 TIRA = INT(RND(1)*5)+1
420 PRINT " tirada:";TIRA
430 IF TIRA = 1 THEN PRINT CHR$(10);"!Pierdes tu turno! j";J;"pero mantienes tu puntuacion anterior de";APT(J) : GOTO 370 'exit while
440 PT = PT+TIRA
450 GOTO 360</syntaxhighlight>
 
=={{header|BASIC256}}==
{{trans|FreeBASIC}}
<syntaxhighlight lang="basic256">numjugadores = 2
numjugadores = 2
maxpuntos = 100
Dim almacenpuntos(3)
Line 770 ⟶ 909:
End While
Next jugador
Until false</syntaxhighlight>
</syntaxhighlight>
 
=={{header|C}}==
<syntaxhighlight lang="c">#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
Line 857 ⟶ 994:
 
return 0;
}</syntaxhighlight>
}
{{Out}}
 
<pre>Player 1 - You have 0 total points and 0 points this turn
</syntaxhighlight>
 
Output:
<pre>
Player 1 - You have 0 total points and 0 points this turn
What do you want to do (1)roll or (2)hold: 1
 
Line 897 ⟶ 1,030:
You rolled a 3
Player 2 - You have 0 total points and 14 points this turn
What do you want to do (1)roll or (2)hold:</pre>
</pre>
 
=={{header|C sharp}}==
<syntaxhighlight lang="csharp">using System;
using System;
using System.IO;
 
Line 1,016 ⟶ 1,147:
}
}
}</syntaxhighlight>
}
</syntaxhighlight>
 
=={{header|C++}}==
Line 1,174 ⟶ 1,304:
What do you want to do (H)old or (R)oll?
</pre>
 
=={{header|Chipmunk Basic}}==
{{works with|Chipmunk Basic|3.6.4}}
<syntaxhighlight lang="vbnet">100 numjugadores = 2
110 maxpuntos = 100
120 dim almacenpuntos(3)
130 almacenpuntos(1) = 1
140 almacenpuntos(2) = 1
150 cls
160 print "The game of PIG"
170 print "===============";chr$(13);chr$(10)
180 print "Si jugador saca un 1, no anota nada y se convierte en el turno del oponente."
190 print "Si jugador saca 2-6, se agrega al total del turno y su turno continúa."
200 print "Si jugador elige 'mantener', su total de puntos se añade a su puntuación,";
210 print " y se convierte en el turno del siguiente jugador.";chr$(10)
220 print "El primer jugador en anotar 100 o más puntos gana.";chr$(13);chr$(10)
230 while
240 for jugador = 1 to 2 'numjugadores
250 puntos = 0
260 while almacenpuntos(jugador) <= maxpuntos
270 print
280 print "Jugador ";jugador;": (";almacenpuntos(jugador);",";puntos;")";
290 input " ¿Tirada? (Sn) ",nuevotiro$
300 if ucase$(nuevotiro$) = "S" then
310 tirada = int(rnd(1)*5)+1
320 print " Tirada:";tirada
330 if tirada = 1 then
340 print chr$(10);"¡Pierdes tu turno! jugador ";jugador;
350 print " pero mantienes tu puntuación anterior de ";almacenpuntos(jugador)
360 exit while
370 endif
380 puntos = puntos+tirada
390 else
400 almacenpuntos(jugador) = almacenpuntos(jugador)+puntos
410 print " Te quedas con: ";almacenpuntos(jugador)
420 if almacenpuntos(jugador) >= maxpuntos then
430 print chr$(10);"Gana el Jugador ";jugador;" con ";almacenpuntos(jugador);" puntos."
440 end
450 endif
460 exit while
470 endif
480 wend
490 next jugador
500 wend false
510 end</syntaxhighlight>
 
=={{header|Clojure}}==
Line 1,700 ⟶ 1,875:
=={{header|EasyLang}}==
 
[https://easylang.dev/show/#cod=lVVNj5swEL3zK16zVS+rIBO+kmrZSy89Vm0v1SqqWHAWawGvwFmS/vrKGBubZFctiiJmPB9v3syYgtcPe2R4wG6XYpem2Hv98bEDa5l4zbveA9AfG2Qg46vIhXk/NpMvAcFeql7q/Ew7ZAg833vpeIFH0eKEM8RJfIQPX1oVvOYdkiSRQs1aOrBSVAi2Um74K5Ue+gwn3CKIlWI6XCPCGWuEczRCRkyCnkTP/lAERhxTazh9xQcN4zEvnp86fmxLGeNBYR/LKGqadybfFun2nxKtvo0h1it8mphwLLdWRFW78vrJRV5/hvSSlFo4jGsspRvI/woZQqytBAqXLKHamxRJjGSkp6OFQEgQ7OazLdLoakVOCZUDIbLdk/RN+AqDwiqbvyHyt/rO63qldanSfeV1udKdaU9imp6pPRYXuM2kKLXsMI7jvRpBdzilVPFBvvoGbUCw2ziVpBelq6Am232GgOiIqshf/IiBt/iw0onUIowU07qnjvWPgYmi0tvg+772MvvhdnCOtzHgBWtoh43ne7xVgkaqLIPJ8QYdr+tJYAeIpmiFxYjmIYoQprNuHhpr3tRjJsYKwQ4oWUFxb/LO7N9m45mrt+4J9VgkXWucLttGR4h1OjI7DYGLKVtgMpN0GdoFobLEcbygahMhjBZ8BCGC8F2AyjV1WJ7wdXlbslYgWZTj0qY6t3bKud5QMx7Ej99hWNsEl0T4am7ncdq4c7jcJ9tU0zAWTIzpWxOl6CMEoWs5k6f3NHR37kvNimcceIeWDnjKG7pYvkgty3SByDUwd4e1I5q/4Oq9rShSW9bwY09/l3xo3VXTsNhhMjnJPSDI29Io7hDFluK8tDjjbq5PsjIv7cjtHDhZBt79V+Dl9F90Wk+2/YV3bk7fM0ej8i8= Run it]
[https://easylang.dev/show/#cod=lVVLb9pAEL7zK6ZO1UuEtQY/oCq59NJj1fZSIVQ5ZhOs2N7IXgL013d2x/sySdU6iHjn+c03M0slmu0ONrCF9bqAdVHAbjYc73uou1q+lP0wA4Dh2KIJ06+ylPb92I6+DP92SvTclBfeoyyZxbPnXlRwLzs4wwXkWb6HGGJlVYlG9JDnuTo0dcdP9V4eIFmpcyteuPIwOny/hSQjwaicQ4oh57B00RjTmCQ/y6H+zSGxR53awBkO4mRg3JfV02Mvjt1exdgSdl1G1fCyt/lWUKz+KVH0VYeYR/BhZCKwXHkRqXby+iFk2XwE5aUo9XBY10ydbkB9H5DdJdbuEhAuVcJhZ1PkGeSanp5XEpYMkrXTYUXpqxUFJRwCCKnvnhdvwicMhFU1f8HUJ/ommiYysoJkX0Szj0xnurMcp2dsj8cF3G7UUUnrBz2OdzSCEAynOmF/1Wts0SYM1ougkuKqdApqs93h/DITkYr8KY5wEh28i0wiWgRNMW8GHlh/P9WyOphtiOPYeNn9CDvo4i0seFm3aLlAejCtPhikZJmMjjfQI7XjAdWyrTrpMQIjD2kKy8LJ3NB480aPnRgvBAbe1xVH3hMnBGIfm6N0ody7J+jxSHKugUU8RceYp9XMjkNAj8G0mWCyk3QdOgRBWbIsm1C1QKrSCR/JEj9/BUiuRcDyiK8vu71oIZ9UE7JGjZsH1bzeTzDTwWIP+hXBxsaLZ3jQ/3njpmkxKiZ9M+vkmxoWdL3Mmr41UMQeYzhRgaXjzqypNaAl+tzU1RM8oCn+QMBj2fLJ7ukWxeb+UFtgrw5vRQx/7p72r22iiJasFceB/9qLU6dUrmADCyVkclZrwACbagWfIM08wWVqcUELWx8+3s5qbl3gfBp4/V+Bp8N/1Wkz2FWJfPm/8kbmrtB4ZvVa+Ac= Run it]
 
<syntaxhighlight>
Line 1,731 ⟶ 1,906:
text "Total: " & sum[player]
textsize 5
#
h = 3 - player
color col[h]
Line 1,742 ⟶ 1,917:
move 68 67
text "Total: " & sum[h]
#
btn 20 20 "Roll"
btn 70 20 "Hold"
Line 1,789 ⟶ 1,964:
color 000
move 27 37
dice = randomrandint 6
text dice
tmcnt -= 1
Line 1,825 ⟶ 2,000:
.
elif stat = 4
call initvars
call show
.
.
Line 2,466 ⟶ 2,641:
 
</pre>
 
=={{header|IS-BASIC}}==
<syntaxhighlight lang="is-basic">100 PROGRAM "Pig.bas"
110 RANDOMIZE
120 STRING PLAYER$(1 TO 2)*28
130 NUMERIC POINTS(1 TO 2),VICTORY(1 TO 2)
140 LET WINNINGSCORE=100
150 TEXT 40:PRINT "Let's play Pig!";CHR$(241):PRINT
160 FOR I=1 TO 2
170 PRINT "Player";I
180 INPUT PROMPT "Whats your name? ":PLAYER$(I)
190 LET POINTS(I)=0:LET VICTORY(I)=0:PRINT
200 NEXT
210 DO
220 CALL TAKETURN(1)
230 IF NOT VICTORY(1) THEN CALL TAKETURN(2)
240 LOOP UNTIL VICTORY(1) OR VICTORY(2)
250 IF VICTORY(1) THEN
260 CALL CONGRAT(1)
270 ELSE
280 CALL CONGRAT(2)
290 END IF
300 DEF TAKETURN(P)
310 LET NEWPOINTS=0
320 SET #102:INK 3:PRINT :PRINT "It's your turn, " PLAYER$(P);"!":PRINT "So far, you have";POINTS(P);"points in all."
330 SET #102:INK 1:PRINT "Do you want to roll the die? (y/n)"
340 LET KEY$=ANSWER$
350 DO WHILE KEY$="y"
360 LET ROLL=RND(6)+1
370 IF ROLL=1 THEN
380 LET NEWPOINTS=0:LET KEY$="n"
390 PRINT "Oh no! You rolled a 1! No new points after all."
400 ELSE
410 LET NEWPOINTS=NEWPOINTS+ROLL
420 PRINT "You rolled a";ROLL:PRINT "That makes";NEWPOINTS;"new points so far."
430 PRINT "Roll again? (y/n)"
440 LET KEY$=ANSWER$
450 END IF
460 LOOP
470 IF NEWPOINTS=0 THEN
480 PRINT PLAYER$(P);" still has";POINTS(P);"points."
490 ELSE
500 LET POINTS(P)=POINTS(P)+NEWPOINTS:LET VICTORY(P)=POINTS(P)>=WINNINGSCORE
510 END IF
520 END DEF
530 DEF CONGRAT(P)
540 SET #102:INK 3:PRINT :PRINT "Congratulations ";PLAYER$(P);"!"
550 PRINT "You won with";POINTS(P);"points.":SET #102:INK 1
560 END DEF
570 DEF ANSWER$
580 LET K$=""
590 DO
600 LET K$=LCASE$(INKEY$)
610 LOOP UNTIL K$="y" OR K$="n"
620 LET ANSWER$=K$
630 END DEF</syntaxhighlight>
 
=={{header|J}}==
Line 4,938 ⟶ 5,057:
Bert is a winner, on 101</pre>
 
=={{header|uBasic/4tH}}==
<syntaxhighlight lang="qbasic">n = 2
m = 100
Dim @s(n)
 
p = 0
s = 0
 
Do
r = Ask(Join ("Player ", Str(p+1)," rolling? (Y/N) "))
 
If OR(Peek(r, 0), 32) = Ord("y") Then
r = Rnd(6) + 1
Print "Player ";p+1;" rolled ";r
 
If r = 1 Then
Print "Bust! you lose player ";p+1;" but still keep your previous score of ";@s(p)
Print : p = (p + 1) % n : s = 0
Else
s = s + r
EndIf
 
Else
@s(p) = @s(p) + s
 
If (@s(p) < m) = 0 Then
Print "Player ";p+1;" wins with a score of ";@s(p)
Break
EndIf
 
Print : p = (p + 1) % n : s = 0
EndIf
Loop</syntaxhighlight>
=={{header|VBA}}==
 
Line 5,050 ⟶ 5,202:
{{libheader|Wren-ioutil}}
{{libheader|Wren-str}}
<syntaxhighlight lang="ecmascriptwren">import "./ioutil" for Input
import "./str" for Str
import "random" for Random
 
2,020

edits