Huis Persoonlijke financiën Java Programming Challenge: Arrays aan het eenvoudige Tic-Tac-Toe programma toevoegen

Java Programming Challenge: Arrays aan het eenvoudige Tic-Tac-Toe programma toevoegen

Video: From C to Python by Ross Rheingans-Yoo 2024

Video: From C to Python by Ross Rheingans-Yoo 2024
Anonim

Java-programmeeruitdaging bouwt voort op de vorige uitdagingen in deze Tic-Tac-Toe-serie en test uw vermogen om arrays te gebruiken - twee zelfs.

In de Java-programmeerwedstrijd: een eenvoudige Tic-Tac-Toe-game en Java-programmeeruitdaging: een klasse toevoegen aan het eenvoudige Tic-Tac-Toe-programma Je wordt uitgedaagd om een ​​programma te schrijven om het eenvoudige spel Tic-Tac-Toe te spelen.

Als een spel schreeuwt Tic-Tac-Toe om het gebruik van een array om de status van het spel weer te geven. Zonder arrays moet u een afzonderlijke variabele gebruiken om elk vierkant van het bord weer te geven. Met een array kunt u een enkele variabele gebruiken om alle negen vierkanten weer te geven.

Deze programmeeruitdaging is eenvoudig: schrijf een verbeterde versie van het programma dat gebruik maakt van arrays. U moet ten minste twee arrays in uw oplossing gebruiken:

  1. U moet een array gebruiken om het bord te vertegenwoordigen. Hoogstwaarschijnlijk wilt u een eendimensionale array met negen elementen gebruiken, als volgt:

    0 | 1 | 2 --- | --- | --- 3 | 4 | 5 --- | --- | --- 6 | 7 | 8
    

    Met andere woorden, het vierkant linksboven (A1) wordt opgeslagen in matrixelement 0 en het vierkant rechtsonder (C3) wordt opgeslagen in matrixelement 8.

  2. U moet ook een array gebruiken om de acht mogelijke drie-in-een-rij-vectoren te vertegenwoordigen.

    U kunt deze array vervolgens gebruiken om te bepalen of een van de spelers het spel heeft gewonnen. Hoogstwaarschijnlijk wilt u voor deze taak een tweedimensionale array gebruiken. De array bevat acht, drie elementen arrays, die elk de drie indexen van een bepaalde drie-in-een-rij-vector vertegenwoordigen.

    De volledige array bevat de volgende gegevens:

    0 1 2 3 4 5 6 7 8 0 3 6 1 4 7 2 5 8 0 4 8 2 4 6
    

Een bijkomende vereiste van dit programma is dat de klasse TicTacToeBoard die u voor deze uitdaging moet volledig compatibel zijn met de klas die je hebt gemaakt voor de vorige uitdaging. Met andere woorden, het moet exact dezelfde methoden implementeren. Voor uw gemak worden deze methoden herhaald in de volgende tabel.

Omdat deze methoden verwijzen naar de vierkanten van het tic-tac-toe-bord met rij-kolomaanduidingen zoals A1 of B2, moet uw implementatie deze aanduidingen toewijzen aan indexnummers. Als de tekenreeks A1 bijvoorbeeld wordt doorgegeven aan de playAt-methode, moet het programma het stuk markeren op index 0 in de array.

De TicTacToeBoard-klasse
Constructor Beschrijving
TicTacToeBoard

Creëert een nieuw TicTacToeBoard met alle lege vakjes leeg.
Methode Beschrijving
void reset () Hiermee wordt de status van elk vierkant opnieuw ingesteld op leeg.
void playAt (String square, int player) Markeert het opgegeven vierkant (A1, A2, A3, B1, B2, B3, C1, C2 of C3) voor de opgegeven speler (1 voor X, 2 voor O). Gegenereerde uitzondering IllegalArgumentException als vierkant niet een van de toegestane waarden is, speler niet 1 of 2 is, of het opgegeven vierkant niet leeg is.
int isGameOver () Bepaalt of het spel afgelopen is. Retourneert 0 als het spel nog niet voorbij is, 1 als X het spel heeft gewonnen, 2 als O het spel heeft gewonnen en 3 als het een gelijkspel is. De eindvoorwaarden voor het spel zijn als volgt:

1: als een rij, kolom of diagonaal alle X-en bevat.

2: Als een rij, kolom of diagonaal alle O's bevat.

3: Als er geen lege vierkanten zijn en noch X noch O heeft gewonnen.

int getNextMove () Retourneert een geheel getal dat de volgende zet voor de computertegenstander vertegenwoordigt. Deze methode zou een elementaire poging moeten doen om een ​​goede zet te selecteren, volgens de volgende strategie:

* Als het midden (vierkant B2) leeg is, speel dan het middenvierkant.

* Als het midden niet leeg is, maar een van de vier hoeken (vierkanten A1, A3, C1 of C3) leeg is, speel dan een van de hoeken (het maakt niet uit welke).

* Als het middelpunt niet leeg is en geen hoeken leeg zijn, speel dan een van de randen (vierkanten A2, B1, B3 of C2).

String toString () Retourneert een tekenreeks die de huidige status van het bord aangeeft. De reeks bevat nieuwe regeltekens om de rijen weer te geven, evenals scheidingslijnen op afzonderlijke consolelijnen, zoals in dit voorbeeld:

O | | O

- | - | -

| X |

- | - | -

| X |

Nog een uitdaging: voor deze versie van de TicTacToeBoard-uitdaging moet de computerspeler een slimmere strategie gebruiken tegen de menselijke tegenstander. Bepaal de weergave van de computer als volgt:

  1. Als de computer tijdens het volgende spel kan winnen, moet de computer op het winnende vakje spelen.

  2. Als het voor de menselijke tegenstander mogelijk is om te winnen bij zijn of haar volgende spel, moet de computer in het winnende vierkant van de menselijke tegenstander spelen om de winst te blokkeren.

  3. Als het middenvierkant beschikbaar is, moet de computer het middenvierkant nemen.

  4. Als een hoekvierkant beschikbaar is, zou de computer in een van de beschikbare hoeken moeten spelen.

  5. De computer zou in een beschikbaar randvierkant moeten spelen.

Houd er rekening mee dat om deze strategie te implementeren, u een routine moet ontwikkelen die kan bepalen of een van de spelers zijn volgende zet kan winnen. Om dit te doen, moet je kijken naar elk van de acht, drie-op-een-rij-vectoren om te bepalen of de vector één leeg vierkant bevat en of elk van de andere twee vierkanten tekens bevat voor dezelfde tegenstander (die is, twee X's of twee O's).

U kunt dat doen door 0 te gebruiken om een ​​leeg vierkant weer te geven, 1 om een ​​X weer te geven en 2 om een ​​O aan te duiden. Maar dat zou behoorlijk gecompliceerde logica vereisen - zoiets zou vereist zijn, ervan uitgaande dat s1, s2, en s3 zijn gehele getallen die de inhoud van de drie vierkanten van een van de acht, drie-op-een-rij-vectoren bevatten:

als (s1 == 0 & s2 == 1 & s3 == 1) // X kan win door te spelen in s1 if (s2 == 0 & s1 == 1 & s3 == 1) // X kan winnen door in s2 te spelen als (s3 == 0 & s1 == 1 & s2 == 1) // X kan winnen door te spelen in s3

Dus hier is een tip: gebruik in plaats daarvan 0, 1 en 2 om een ​​leeg vierkant, een X en een O te representeren, gebruik de priemgetallen 2, 3 en 5.Bepaal vervolgens eenvoudigweg de drie waarden voor die vector om te bepalen of een speler kan winnen op een bepaalde vector. Als het resultaat 18 is, kan X winnen (233 = 18). Als het resultaat 50 is, kan O winnen (255 = 50).

Merk ook op dat, hoewel deze strategie een verbetering is ten opzichte van de strategie die werd gebruikt voor eerdere versies van het programma, het nog steeds geen perfecte strategie is: je kunt nog steeds de computer verslaan met de juiste volgorde van spelen. Als je een extra uitdaging wilt, overweeg dan welke aanvullende strategie nodig zou zijn om het spel onwikkelbaar te maken en bedenk vervolgens een manier om de nieuwe strategie te implementeren.

U vindt de oplossing voor deze uitdaging op het tabblad Downloads van de productpagina Java All-in-One voor modellen, 4e editie.

Veel succes!

Java Programming Challenge: Arrays aan het eenvoudige Tic-Tac-Toe programma toevoegen

Bewerkers keuze

Hoe u Flash-video maakt en codeert - dummies

Hoe u Flash-video maakt en codeert - dummies

Als de pagina's die u maakt, zijn gewonnen ' t kan worden bekeken op mobiele apparaten (zoals een iPad of een smartphone), kunt u webpagina's maken met prachtige Flash-video. Adobe Flash Professional CS6 heeft een eigen ingebouwde video-encoder. Full-motionvideo in Flash is iets heel moois. U past de video aan voor het bekijken door de doelgroep ...

Hoe een aanpasbare interface te maken in CSS3 - dummies

Hoe een aanpasbare interface te maken in CSS3 - dummies

De grote variëteit en soorten schermen gebruikt om informatie weer te geven, maakt het nodig dat uw CSS3-commando's de gebruiker toestaan ​​om het formaat van de elementen naar wens aan te passen. In de meeste gevallen kunt u de gebruiker eenvoudig toestaan ​​om het element op elke gewenste grootte te maken. Er kunnen zich echter situaties voordoen waarin u de grootte van de grootte moet controleren ...

Hoe u een eenvoudige tabel op uw webpagina maakt - dummies

Hoe u een eenvoudige tabel op uw webpagina maakt - dummies

Tabellen laten u organiseer informatie op uw webpagina en geef het een georganiseerde uitstraling die uw bezoekers nuttig zullen vinden. Bij gebruik zoals bedoeld, hebben tabellen rijen en kolommen. Voor elke spot waar een rij en kolom elkaar kruisen, hebt u een tabelcel. Elke cel kan zijn eigen opmaak hebben: de gegevens erin ...

Bewerkers keuze

Hoe Postproduction Shareninging Filters werken - dummies

Hoe Postproduction Shareninging Filters werken - dummies

Verscherpingsfilters werken in postproductie door de randen (of aangrenzende gebieden met tonaal contrast) te benadrukken aan elkaar) in een afbeelding. Ze creëren een fijne highlight aan de donkere kant van de rand en een piepklein lowlight aan de lichtere kant van de rand. Dit toegevoegde contrast zorgt ervoor dat de randen er scherper uitzien vanaf een ...

HDR Work-Flow voor foto's met één belichting - dummies

HDR Work-Flow voor foto's met één belichting - dummies

In grote lijnen, enkele belichting hoog dynamisch bereik volgt dezelfde workflow als HDR-fotografie tussen haakjes. Er kunnen kleine verschillen zijn, dus hier is een overzicht van de werkstroom: configureer uw camera voor single-shot HDR. Het enige dat u zoekt, is de beste foto die u kunt maken. Besteed aandacht aan de lichtomstandigheden, het onderwerp, beweging en ...

Geavanceerde compacte en superzoomcamera's voor HDR-fotografie - dummies

Geavanceerde compacte en superzoomcamera's voor HDR-fotografie - dummies

Stap omhoog van compacte digitale camera's binnen het budgetbereik, vindt u duurdere compacte digitale camera's voor HDR-fotografie, ook wel high-end compacts, superzoomlenzen en dSLR-look-alikes genoemd. Er zijn zoveel vaak overlappende categorieën dat het je hoofd laat draaien. De twee dingen die deze reeks camera's gemeen hebben, zijn hun ...

Bewerkers keuze

In te schakelen Class Tracking in QuickBooks 2013 - dummies

In te schakelen Class Tracking in QuickBooks 2013 - dummies

Om activity-based costing te gebruiken (ABC ) in QuickBooks 2013 moet u de QuickBooks Class Tracking-functie inschakelen. Met Class Tracking kunt u inkomsten- en onkostentransacties categoriseren als niet alleen vallen in inkomsten- en uitgavenrekeningen, maar ook als vallen in bepaalde klassen. Volg deze stappen om Class Tracking in QuickBooks in te schakelen: Kies Bewerken → Voorkeuren ...

Gebruikt om een ​​exemplaar van een QuickBooks-gegevensbestand te gebruiken - dummies

Gebruikt om een ​​exemplaar van een QuickBooks-gegevensbestand te gebruiken - dummies

Ongeacht of de client verzendt handmatig een accountantskopie van een QuickBooks-gegevensbestand, e-mails een accountantsexemplaar, of verzendt een accountantskopie via de Intuit-bestandsoverdrachtservice, u gebruikt de kopie van de accountant door Bestand → Verzend bedrijfsdossier → Accountantskopie → Open & converteer overzetten te kiezen Bestand commando. Wanneer u deze opdracht kiest, geeft QuickBooks een ...

Hoe Audit Trails te gebruiken in QuickBooks - dummies

Hoe Audit Trails te gebruiken in QuickBooks - dummies

Als u besluit om meerdere gebruikers toegang te geven tot de QuickBooks-gegevens bestand, zult u de QuickBooks Audit Trail-functie waarderen, die bijhoudt wie welke wijzigingen aan het QuickBooks-gegevensbestand aanbrengt. U kunt transacties niet verwijderen uit de lijst of geschiedenis van de audittrail, behalve door gegevens te archiveren en te condenseren. Audit trail inschakelen ...