Hjem Personlig finansiering Java Programmeringsutfordring: Legge til Arrays til det enkle Tic-Tac-Toe-programmet

Java Programmeringsutfordring: Legge til Arrays til det enkle Tic-Tac-Toe-programmet

Video: Java Tutorial for Beginners [2019] 2025

Video: Java Tutorial for Beginners [2019] 2025
Anonim

Dette Java programmering utfordring bygger på de tidligere utfordringene i denne Tic-Tac-Toe serien og tester din evne til å bruke arrayer - to av dem faktisk.

I Java Programmeringsutfordring: En enkel Tic-Tac-Toe-spill og Java Programmeringsutfordring: Legge til klasse til det enkle Tic-Tac-Toe-programmet du utfordres til å skrive et program for å spille det enkle spillet Tic-Tac-Toe.

Som et spill gråter Tic-Tac-Toe for bruk av en matrise for å representere statusen til spillet. Uten arrays må du bruke en egen variabel for å representere hver firkant av brettet. Med en matrise kan du bruke en enkelt variabel til å representere alle ni firkanter.

Denne programmeringsutfordringen er enkel: Skriv en forbedret versjon av programmet som bruker arrays. Du må bruke minst to arrays i løsningen din:

  1. Du må bruke en matrise som representerer brettet. Mest sannsynlig vil du bruke et endimensjonalt array med ni elementer, som følger:

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

    Med andre ord lagres øverste venstre torg (A1) i arrayelement 0, og den nederste høyre torget (C3) lagres i arrayelementet 8.

  2. Du må også bruke en matrise til å representere de åtte mulige tre-i-en-rad-vektorene.

    Du kan deretter bruke dette valget for å avgjøre om en spiller har vunnet spillet. Sannsynligvis vil du bruke et todimensjonalt utvalg for denne oppgaven. Arrangementet vil inneholde åtte, treelementarrayer, som hver representerer de tre indeksene til en bestemt tre-i-en-rad-vektor.

    Komplett utvalg vil inneholde følgende data:

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

Et ekstra krav til dette programmet er at TicTacToeBoard-klassen du lager for Denne utfordringen må være helt kompatibel med klassen du opprettet for den foregående utfordringen. Med andre ord, det må implementere nøyaktig samme metoder. For enkelhets skyld gjentas disse metodene i følgende tabell.

Fordi disse metodene refererer til firkantene i tic-tac-toe-kortet ved hjelp av kolonnebetegnelser som A1 eller B2, må implementeringen din kartlegge disse betegnelsene til indeksnumre. For eksempel, hvis strengen A1 er overført til playAt-metoden, må programmet markere spillet på indeks 0 i arrayet.

TicTacToeBoard Class
Constructor Beskrivelse
TicTacToeBoard

Oppretter en ny TicTacToeBoard med alle torgene tomme.
Metode Beskrivelse
ugyldig nullstilling () Tilbakestiller statusen til hvert felt for å tømme.
void playAt (String square, int player) Markerer angitt kvadrat (A1, A2, A3, B1, B2, B3, C1, C2 eller C3) for den angitte spilleren (1 for X, 2 for O). Kaster ut IllegalArgumentException hvis firkantet ikke er en av de tillatte verdiene, spilleren er ikke 1 eller 2, eller den angitte firkanten er ikke tom.
int isGameOver () Bestemmer om spillet er over. Returnerer 0 hvis spillet ikke er over, 1 hvis X har vunnet spillet, 2 hvis O har vunnet spillet, og 3 hvis kampen er uavgjort. Spillets sluttbetingelser er som følger:

1: Hvis en rad, kolonne eller diagonal inneholder alle X-er.

2: Hvis en rad, kolonne eller diagonal inneholder alle O-er.

3: Hvis det ikke er tomme firkanter og verken X eller O har vunnet.

int getNextMove () Returnerer et heltall som representerer neste trekk for datamaskinens motstander. Denne metoden bør gjøre en rudimentær innsats for å velge et godt trekk, i henhold til følgende strategi:

* Hvis senteret (kvadrat B2) er tomt, spiller du midtfeltet.

* Hvis senteret ikke er tomt, men noen av de fire hjørnene (firkantene A1, A3, C1 eller C3) er tomme, spiller du en av hjørnene (det spiller ingen rolle hvilken).

* Hvis senteret ikke er tomt og ingen hjørner er tomme, spiller du en av kantene (firkantene A2, B1, B3 eller C2).

String toString () Returnerer en streng som representerer styrets nåværende status. Strengen inneholder nybegynne tegn for å vise rader og separatorlinjer på separate konsolllinjer, som i dette eksemplet:

O | | O

- | - | -

| X |

- | - | -

| X |

Som en ytterligere utfordring, for denne versjonen av TicTacToeBoard-utfordringen, bør dataspilleren bruke en mer intelligent strategi mot den menneskelige motstanderen. Bestem datamaskinens spill som følger:

  1. Hvis det er mulig for datamaskinen å vinne på neste spill, bør datamaskinen spille på vinnende firkant.

  2. Hvis det er mulig for den menneskelige motstanderen å vinne på sitt neste spill, skal datamaskinen spille i den menneskelige motstanderens vinnende firkant for å blokkere seieren.

  3. Hvis midtpunktet er tilgjengelig, bør datamaskinen ta midtfeltet.

  4. Hvis noen hjørnefirkant er tilgjengelig, skal datamaskinen spille i en av de tilgjengelige hjørnene.

  5. Datamaskinen bør spille i en tilgjengelig kantkant.

Merk at for å implementere denne strategien må du utvikle en rutine som kan avgjøre om en spiller kan vinne på sitt neste trekk. For å gjøre dette må du se på hver av de åtte, tre-i-rad-vektorer for å avgjøre om vektoren inneholder ett tomt firkant og hvis hver av de to andre rutene inneholder merker for samme motstander (det er, to X'er eller to O'er).

Du kan gjøre det ved å bruke 0 for å representere et tomt firkant, 1 for å representere en X og 2 for å representere en O. Men det ville kreve ganske komplisert logikk - noe som dette ville være nødvendig, forutsatt at s1, s2, og s3 er heltall som inneholder innholdet i de tre rutene av en av de åtte, tre-i-en-rad vektorer:

hvis (s1 == 0 & s2 == 1 & s3 == 1) // X kan vinner ved å spille i s1 hvis (s2 == 0 & s1 == 1 & s3 == 1) // X kan vinne ved å spille i s2 hvis (s3 == 0 & s1 == 1 & s2 == 1) // X kan vinne ved å spille i s3

Så her er et tips: I stedet for å bruke 0, 1 og 2 for å representere en tom firkant, en X og en O, bruk primtallene 2, 3 og 5 i stedet.Deretter, for å bestemme om en spiller kan vinne på en gitt vektor, må du bare multiplisere de tre verdiene for den vektoren. Hvis resultatet er 18, kan X vinne (233 = 18). Hvis resultatet er 50, kan O vinne (255 = 50).

Merk også at selv om denne strategien er en forbedring i forhold til strategien som er brukt for tidligere versjoner av programmet, er det fortsatt ikke en perfekt strategi: Du kan fortsatt slå datamaskinen med riktig rekkefølge av spill. Hvis du vil ha en ekstra utfordring, bør du vurdere hvilken ekstra strategi som er nødvendig for å gjøre spillet ubrukelig, og utarbeide en måte å implementere den nye strategien på.

Du finner løsningen på denne utfordringen på nedlastingsfanen i Java All-in-One for Dummies, 4. utgave produktside.

Lykke til!

Java Programmeringsutfordring: Legge til Arrays til det enkle Tic-Tac-Toe-programmet

Redaktørens valg

Vis resultatene i forhold til et målområde i Excel-oversiktspanelet - dummies

Vis resultatene i forhold til et målområde i Excel-oversiktspanelet - dummies

Noen ganger trenger du målserier i Excel-oversikten og rapportene dine. I enkelte bedrifter er et mål ikke en verdi - det er en rekke verdier. Det vil si at målet er å holde seg innenfor et definert målområde. Tenk deg at du klarer en liten bedrift som selger esker med kjøtt. En del av jobben din er å ...

Slicer Tilpasninger for Slicers på Excel Dashboard - dummies

Slicer Tilpasninger for Slicers på Excel Dashboard - dummies

Hvis du skal bruke slicers på en Excel-dashbordet, bør du gjøre litt formatering for å få dine skiver til å passe til temaet og oppsettet på instrumentpanelet. Følgende diskusjon dekker noen formateringsjusteringer du kan gjøre til dine skiver. Størrelse og plassering av skiver En skiver oppfører seg som en standard Excel ...

Enkel statistikk i Excel Data Analyse - dummies

Enkel statistikk i Excel Data Analyse - dummies

Excel gir flere praktiske, brukervennlige verktøy for å analysere informasjon som du lagrer i et bord, inkludert noen raske og skitne statistiske verktøy. Se på følgende enkle bord. En enkel dagligvareliste. Et av de smaleste og raskeste verktøyene som Excel gir, er muligheten til enkelt å beregne summen, gjennomsnittet, antall, minimum og maksimum av ...

Redaktørens valg

Bruk fanen Filtre til å modifisere QuickBooks 2014 Rapporter - dummies

Bruk fanen Filtre til å modifisere QuickBooks 2014 Rapporter - dummies

Filtrene kategorien er trolig den mest interessante og en nyttig kategori som er levert av dialogboksen QuickBooks Modify Report. Filtre-fanen lar deg sette opp filtre som du kan bruke til å angi hvilken informasjon som oppsummeres i rapporten. For å bruke Filtrer-fanen velger du først feltet du vil ha ...

Bruk skjermfeltet til å modifisere QuickBooks 2012-rapporter - dummies

Bruk skjermfeltet til å modifisere QuickBooks 2012-rapporter - dummies

Hvis du klikker Tilpass rapport- QuickBooks viser dialogboksen Endre rapport, som du kan bruke til å tilpasse en rapport. Når du tilpasser en rapport, endrer du rapportens utseende, layout og informasjonen som den oppsummerer. Dialogboksen Endre rapport ser annerledes ut for ulike rapporttyper. Likevel, hvis du ser forbi ...

Slik bruker du QuickBooks for din hvite papir forretningsplan - dummies

Slik bruker du QuickBooks for din hvite papir forretningsplan - dummies

QuickBooks kan hjelpe deg skriv en hvit-papir forretningsplan. Folk skriver ofte en forretningsplan for hvitt papir når de vet at de trenger en strategisk plan, men ikke ønsker å ta de harde beslutningene som er nødvendige for en strategisk plan. Personen i denne konfronten skriver en lang hvit-papir forretningsplan for å camouflere den fraværende strategiske planen. ...

Redaktørens valg

Canon 60D elektronisk nivåfunksjon - dummies

Canon 60D elektronisk nivåfunksjon - dummies

Ikke hvert fotografi må være nivå med horisonten. Imidlertid lider mange typer bilder (landskap, bybilder og arkitektonisk fotografi) sterkt når kameraet er vippet. Den gammeldags løsningen for å utjevne kameraet ditt er å bruke et boble- eller åndnivå (funnet i fotobutikker) for å kontrollere kameraets justering med ...

Kamerainnstillingsdisplayet på et Canon EOS Rebel T3-serie Kamera-dummies

Kamerainnstillingsdisplayet på et Canon EOS Rebel T3-serie Kamera-dummies

På din Canon Rebel T3 eller T3i, kan du se en samling av tilleggsinnstillingsdata via kamerainnstillingsdisplayet. Denne skjermen er bare et informasjonsverktøy, men; Du kan ikke justere noen av de rapporterte innstillingene fra denne skjermen. For å vise skjermbildet Kamerainnstillinger på T3i, vis først innstillingsinnstillingene ...

Canon EOS 70D Kameraoppsett - dummies

Canon EOS 70D Kameraoppsett - dummies

Her er en oversikt over knappene, ringer og andre eksterne kontroller på Canon EOS 70D-kameraet ditt. Objektivet vist i de følgende figurene er Canon EF-S 18-135mm IS (bildestabiliseringsmodell) som selges med kameraet; Andre linser kan variere.