Snake and ladder game

Hi,

I am designing snake and ladder game in unix. I am writing my script in bash shell in Solaris version.
This game is designed by me for which I would like to give access to two players.
When these players execute the game, there should be communication between the three participants(game and two players).
The players should be prompted to have roll the dice for a random number.
Each player must be able to see the other players move.

Could someone please help me out on how to establish this sort of communication between players?

Thanks in advance,
ayarlaga

Is this homework?

I'd be inclined to use named pipes for this problem.

Use one NP for the game to receive commands from players and one for each player so they can receive game state.

Players would have to create a NP and pass it's path to the game using the game NP as they join.

I sort of managed this arrangement ages ago to give some privileges to our 24hr operators to stop & start a service that was always being awkward and was a pain to do. I wrote a script and had it started in a loop at boot time. It would watch a file and respond to messages written there. The Ops then had a scripts of their own to write a message to the file and wait for a return.

All a bit clunky, but it worked.

Perhaps some logic like:-

  1. User1 starts the game, setting up the named pipe / temporary file and tails the file watching for messages from User2
  2. User2 joins the game and writes a confirmation to the temporary file and waits for messages from User1.
  3. User1 uses the value $RANDOM to determine odd or even and therefore who starts.
  4. User1 writes the message to the file and whomever is next to play is prompted, whilst the other waits.
  5. and the looping continues until there is a winner.

How are you planing to roll the dice? Might I suggest something like:-

rndm_num=$RANDOM                     # Only refer to this once.
((test_val=$rndm_num/6))             # Will truncate to integer
((test_val=$test_val*6))             # Will give nearest lower multiple of 6
((dice_val=$rndm_num-$test_val+1))   # Will give score between 1 & 6

Or, you could just start the game up and User1 could send the message "I won." and the games ends. It seems just as useful a way to pass the time as playing a game really. Mind you, the intellectual challenge is good practice. I wrote a soduko solver in ksh which was fun.

Robin

Are you planning on drawing the board with ASCII art?

The snakes are quite challenging to get looking nice,
but the ladders look OK IMO, if you only go straight up with them:

+------------------------------
|    |    |    |    |    |    |   
| 25 | 26 | 27 | 28 | 29 | 30 |    
|    |    |  v |    | |-||    |    
|----+----+--#-+----+-|-|+----|
| /==========} |    | |-||    |    
| 24 | 23 | 22 | 20 | 20 | 19 |    
|    |    |    |    |    |    |
|----+----+----+----+----+----|

---------- Post updated at 07:46 AM ---------- Previous update was at 07:08 AM ----------

Or course if you have a terminal that supports unicode characters (e.g. uxterm) you can improve things a fair bit:

                            
 25  26  27  28  29  30     
          v              

              
 24  23  22  20  20  19     
                        

@rdrtx1
This is not a homework.

Thank you so much for all your replies.

A slightly simpler way to do that is:

((dice_val = $RANDOM % 6 + 1))
1 Like

Dear Don Cragun,

:o I feel like a fool. :o

I did not know about the % operator. I have various scripts generating low random numbers (password generators mainly) that have a variation of my poor attempt above that would be so much neater with your suggestion, and easier to document too.

Thanks for this nugget, I will store it away for future use. :wink:

Robin