Avatar billede signori Nybegynder
10. november 2004 - 17:36 Der er 8 kommentarer og
1 løsning

forklaring af syntax i if sætning

Hej,
jeg har kastet mig over bogen "Beginning .Net game programming in C#" hvilket er en ganske udemærket bog. En af bogens eksempler er en tetris klon. Spillepladen er 16 firkanter bred og har en højde=height. En block består af 4 Square. Hver square kender sin egen position på spillepladen. For at tjekke for kollision hver gang en blok flytter sig tester hver square om et felt er tomt ved at kalde metoden IsEmpty. Returnerer alle IsEmpty true på alle blokkens fire squares så er det ok at flytte blokken.

Mit forståelses problem opstår i metoden IsEmpty. Her vælger man at lave et int[] (arrBitGameField) af størrelsen Height. Det lyder også fornuftigt nok idet en int indeholder 16 bits = bredden på en linie på spillepladen. Men nu til sagen. metoden IsEmpty ser således ud:

public bool IsEmpty(int x, int y)
{
  if(tjek om brikken er uden for spillepladen)
  returner false;
  else
    if((arrBitGameField[y] & (1<<x)) != 0)
    {
      return false;
    }
  return true;
}

efter at have gennemlæst metoden ca. 10 gange har jeg stadig ikke fået fuld klarhed over hvad det er linien:

if((arrBitGameField[y] & (1<<x)) != 0)

egentlig tester....eller rettere logikken i betingelsen. Er der nogle der kan forklare mig det.
Avatar billede arne_v Ekspert
10. november 2004 - 17:51 #1
Den tester om bit x er sat i arrBitGameField[y]
Avatar billede arne_v Ekspert
10. november 2004 - 17:53 #2
(1 << x) laver en int med bit x 1 og resten 0

så laver man an bit vis AND med arrBitGameField[y] soom returnerer enten (1 << x)
eller 0 alt efter om samme bit er sat i arrBitGameField[y] eller ej
Avatar billede signori Nybegynder
10. november 2004 - 18:42 #3
okay. Så hvis jeg kalder IsEmpty(2,5) vil følgende ske:
en int med bit 5 = 1 og resten af bitsne = 0. så sammenlignes arrBitGameField[2] med den førstnævnte int. er der tilfælde hvor bit x i arrBitGameFild og bit x i den førstnævnte int er sat, så returneres (1<<x). det betyder at hvis der returneres (1<<X) så er der en collision og derfor skal false returneres. returneres der 0 er der ikke collision.

Det virker lidt langhåret men jeg tror jeg har fanget den. Kan man skrive syntaxen på en anden måde? Det vil evt. hjælpe med at få tankegangen slået helt fast.
Avatar billede arne_v Ekspert
10. november 2004 - 18:53 #4
Jeg tror at du har byttet om på x og y i dit eksempel men ellers er det rigtigt.

Jeg kan ikke lige umiddelbart kom epå andre måder at lave det på.
Avatar billede arne_v Ekspert
10. november 2004 - 18:54 #5
komme på
Avatar billede Spotgun Seniormester
10. november 2004 - 19:51 #6
Kan du gi' mig ISBN-nummeret eller forfatter på bogen? Det lyder da til at være ret interessant :)
Avatar billede arne_v Ekspert
10. november 2004 - 19:53 #7
Prøv og søg på titlen på www.amazon.com
Avatar billede signori Nybegynder
10. november 2004 - 19:58 #8
du har ret arne_v der var lige en ombytter. smider du lige et svar.

spotgun - den er fra forlaget Apress (www.apress.com). her kan du også downloade kildekoden der bruges i bogen. ISBN nummeret er 1-59059-319-7 og forfatterne er David Weller, Alexandre Santos og Ellen Hatton. God fornøjelse. Jeg synes dog at bogen på visse punkter halter lidt....men omvendt får jeg også en hel del ud af den.
Avatar billede arne_v Ekspert
10. november 2004 - 19:59 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester