Zeeslag is een bekend spelletje dat oorspronkelijk op papier werd gespeeld. Later bracht MB een spel onder dezelfde titel uit. Het spel kan nu ook online via het internet gespeeld worden.
Zeeslag wordt gespeeld op een veld van 10 x 10 hokjes. Dit veld is langs 1 as genummerd met getallen (van 1 tot 10), en langs 1 as met letters (A tot J). Een hokje wordt derhalve aangeduid met een letter-cijfercombinatie, bijvoorbeeld A1 of B9.
Iedere speler mag op zijn helft tien schepen plaatsen met een omvang variërend van 2 tot 5 opeenvolgende hokjes. Schepen mogen horizontaal of verticaal staan, maar niet diagonaal. Het aantal vierkanten voor elk schip wordt bepaald door het type schip. De boten raken elkaar niet, ze liggen helemaal vrij van de andere schepen. De soorten en aantallen toegestane schepen zijn hetzelfde voor elke speler. De meest gebruikte schepen zijn:
Aantal schepen | Scheepstype | Afmeting in vakjes |
1 x | vliegdekschip | 6 |
2 x | slagschip | 4 |
3 x | onderzeeër/Torpedobootjager | 3 |
4 x | Patrouilleschip | 2 |
Nadat de schepen zijn geplaatst, verloopt het spel in een aantal ronden. In elke ronde neemt iedere speler een beurt om een doelvak in het rooster van de tegenstander die moet worden beschoten te noemen. De tegenstander vertelt of het vak wordt bezet door een schip, en als het een "hit" is merken zij dit op hun eigen eerste rooster. De aanvallende speler neemt nota van de treffer of misser op zijn eigen "volg"rooster, om zich een beeld vormen van de vloot van de tegenstander.
Doel is dat beide spelers zo door gericht te raden proberen als eerste de volledige locaties van alle schepen van de tegenstander te raden en zo de vloot van de tegenstande "tot zinken" te brengen.
Wanneer alle coördinaten van een schip zijn geraakt, is het schip gezonken. De eigenaar van het schip deelt dit mee, bijvoorbeeld "Je hebt mijn slagschip laten zinken!". Als alle schepen van een speler zijn gezonken, is het spel afgelopen en wint de tegenstander.
Schrijf een programma dat een rooster van 10x10 getallen inleest, dus 10 lijnen met elk 10 getallen. De getallen zijn ofwel 0 ofwel 1. Het getal 1 duidt op een deel van een schip; het getal 0 staat voor water. Het rooster met nullen en enen wordt in een list gestopt. Vervolgens leest het programma ook een coördinaat van een vakje in.
Het programma bevat ook een booleaanse functie is_geraakt(). Deze functie neemt het rooster als argument en de opgegeven coördinaat. De functie geeft als resultaat True terug indien op deze coördinaat effectie een gedeelte van een schip lig, in het andere geval geeft de functie False terug.
Het programma gebruikt de functie is_geraakt() om te controleren of er een schip geraakt werd. Indien dit het geval is verschijnt er "Raak" op het scherm, in het andere geval "Water"
1101001111 0001000000 1001011101 1000000001 1000000000 1000010001 0000010001 1100000001 0000000000 0000111111 F7
Raak