Demonstration och konsultation Arbetsbokens avsnitt 8 Ett exempel på spelprogrammering Kan vara till hjälp inför laboration 5

Relevanta dokument
Demonstration och konsultation Arbetsbokens avsnitt 5 och 6 LCD Grafisk display Introduktion till laboration 3

Programmering av grafisk display

Programmering av grafisk display

Programmering av inbyggda system

GPIO - General Purpose Input Output

GPIO - General Purpose Input Output

// //Constructor public function Main_Playground() { init(); }

På den här övningen ska vi träna på att förflytta en figur med hjälp av piltangenterna.

Tentamen med lösningsförslag

Arduinokurs. Kurstillfälle 4

#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> unsigned char num;

Digitala Projekt(EITF40) - Larm

EITF11. WormFight. Axel Eriksson, Felix Geuken Handledare: Bertil Lindvall EITF11

Det finns många flaggor till g++,

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Lösningsförslag tentamen FYTA11 Java

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

OOP Objekt-orienterad programmering

Hantering av textsträngar och talsträngar. William Sandqvist

Lektion 2: Sökagenter. Robin Keskisärkkä

C-programmering del 4. Ulf Assarsson. extern, sta.c, Överkurs: const, inline, Gameloop, grafikloop, fraktalt berg

Programmering för språkteknologer II, HT2011. Rum

Demonstration och konsultation Arbetsbokens avsnitt 7 Händelsestyrt processbyte Förberedande inför laboration 4

Exempel: Förel Rekursion III Nr 14. Uno Holmer, Chalmers,

Lösningsförslag till tentamen

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Högskolan i Halmstad Multimedia och visuell kommunikation Övning 1 Adobe Flash, grundfunktioner & interpolering. Efter övningen förväntas du kunna:

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

Föreläsning 4. Val, boolska värden, läsbarhet, osv

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

Realtidsprogrammering. En introduktion Implementering (med exempel från PIC)

Assemblerprogrammering för ARM del 2

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

Objektorientering i liten skala

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen med lösningsförslag

Datorprojekt, del 1. Digitala system 15 p

SORTERING OCH SÖKNING

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Maskinorienterad Programmering LP3-2017/2018

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

En kort text om programmering i C.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Grafik. För enklare datorsystem

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << "Hello World\n"; return 0; } C++, Övning 1

Ulf Assarsson. Grundläggande C-programmering del 5 Applika'onsbyggnad/Spelprogrammering (real'dsstyrsystem) och Avancerad C.

grundläggande C++, funktioner m.m.

Föreläsning Datastrukturer (DAT036)

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Rapport Digitala Projekt EITF Grupp 12 Elin Blomstergren, Victor Sundgren Handledare: Bertil Lindvall. Fyra i rad

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

PC-teknik, 5 p LABORATION FILHANTERING

F11 - Rekursion. ID1004 Objektorienterad programmering Fredrik Kilander

Enkla datatyper minne

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

Programmering för språkteknologer II, HT2014. Rum

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Digitala Projekt (EITF11) Hemlarm

Datorteknik 2 (AVR 2)

Tentamen, EDAA10 Programmering i Java

Lösningar Datastrukturer TDA

Grafik. För enklare datorsystem

Larmcentral. Digitala Projekt. Cecilia Olsson & Erika Björck Handledare: Bertil Lindvall LUNDS TEKNISKA HÖGSKOLA

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Grundläggande datalogi - Övning 4

Föreläsningar 9, 10 (okt 01, okt 03 v 40). delvis DD Chapter 7.

Imperativ programmering. Föreläsning 2

KALKYLATOR LABORATION4. Laborationens syfte

Tentamen OOP

TDDI82 - Projekt. Christoffer Holm. Institutionen för datavetenskap (IDA)

2D1339 Programkonstruktion för F1, ht 2003

Programmeringsteknik I

Föreläsning 9-10 Innehåll

2D1339 Programkonstruktion för F1, ht 2004

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Karlstads Universitet, Datavetenskap 1

F4. programmeringsteknik och Matlab

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

JAVAUTVECKLING LEKTION 4

SP:PROG3 HT12 Tenta

Föreläsning 3. Stack

Synkronisering. Ordning och reda

Programmeringsuppgift Game of Life

Kungl. Tekniska högskolan NADA Grundformer med Stava

Programmering av inbyggda system 2014/2015

Klassdeklaration. Metoddeklaration. Parameteröverföring

Maskinorienterad programmering

Arrays (indicerade variabler) Föreläsning 6

The Phenomenal Doorbell Bilaga 2. Källkod

Lösningsförslag till tentamen

AVR 5. Styrning av trafikljus. Digitala system 15 p

Övning 6. Parallellport, timer

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Transkript:

Spelprogrammering Demonstration och konsultation Arbetsbokens avsnitt 8 Ett exempel på spelprogrammering Kan vara till hjälp inför laboration 5 Demonstrationsövning 6 1

Spel exempel: - Tile baserat. - 16x8 tiles - Spelaren förflyttar sig i steg om 8 pixels i x och y led. - Mål: Ta nyckeln, gå till dörren. - Speltillstånd. Demonstrationsövning 6 2

Spelprogrammering: - Rita grafik tiles. - Konvertera data (för att rita effektivt). - Beskriva och rita rum - Interagera med spelarfigur. - Kollisioner. - Speltillstånd. Demonstrationsövning 6 3

unsigned char wall1[64] = {1,1,1,1,1,1,1,1, 1,0,0,1,0,0,1,0, 1,0,0,1,0,0,1,0, 1,1,1,1,1,1,1,1, 0,0,1,0,0,0,1,0, 0,0,1,0,0,0,1,0, 1,1,1,1,1,1,1,1, 1,0,0,0,1,0,0,1; Rita tiles - Enkelt sätt att beskriva en tile. Men ej effektivt att rita! unsigned char wall2[64] = {1,0,0,0,1,0,0,1, 1,1,1,1,1,1,1,1, 1,0,0,1,0,0,1,1, 1,0,0,1,1,1,1,0, 1,0,0,1,0,0,1,0, 1,1,1,1,1,1,1,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,0,0,1; Demonstrationsövning 6 4

unsigned char wall1[64] = {1,1,1,1,1,1,1,1, 1,0,0,1,0,0,1,0, 1,0,0,1,0,0,1,0, 1,1,1,1,1,1,1,1, 0,0,1,0,0,0,1,0, 0,0,1,0,0,0,1,0, 1,1,1,1,1,1,1,1, 1,0,0,0,1,0,0,1; unsigned char wall2[64] = {1,0,0,0,1,0,0,1, 1,1,1,1,1,1,1,1, 1,0,0,1,0,0,1,1, 1,0,0,1,1,1,1,0, 1,0,0,1,0,0,1,0, 1,1,1,1,1,1,1,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,0,0,1; Rita tiles - Enkelt sätt att beskriva en tile. Men ej effektivt att rita! unsigned char c_wall[8] = {0xF3, 0x92,0x9E, 0xF2, 0X93,0x92,0xFE,0x93; Demonstrationsövning 6 5

void draw8x8(unsigned char *pattern, int x, int y) /*x 1-16, y 1-8 */ { unsigned char controller; int col; int phys_x, phys_y; if( (x > 16 ) (y > 8) ) return; phys_y = y - 1; if(x > 8){ controller = B_CS2; x = x - 9; else{ controller = B_CS1; x = x - 1; for (col = 0; col < 8; col ++) { phys_x = (x*8 + col); graphic_writecommand(lcd_set_add phys_x, controller ); graphic_writecommand(lcd_set_page phys_y, controller ); graphic_writedata( pattern[col], controller); Demonstrationsövning 6 6

Konvertera tiles : void convert8x8(unsigned char *in, unsigned char *out){ int row, col; unsigned char current_col; for (col = 0; col < 8; col ++) { /* for each column */ current_col = 0; for (row = 0; row < 8; row ++) { if (in[row * 8 + col]) current_col = (1 << row); out[col] = current_col; Demonstrationsövning 6 7

Beskriva rum : unsigned char room1[128] = {1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1, 2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2, 1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,3, 2,0,1,0,0,0,0,0,0,1,2,1,2,0,0,2, 1,0,2,1,2,1,2,0,0,2,0,0,1,0,0,1, 2,0,0,0,0,0,0,0,0,1,0,0,2,0,0,2, 1,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1, 2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,2; Demonstrationsövning 6 8

Beskriva rum : Mönster uppsättningar: unsigned char room1[128] = {1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1, 2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2, 1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,3, 2,0,1,0,0,0,0,0,0,1,2,1,2,0,0,2, 1,0,2,1,2,1,2,0,0,2,0,0,1,0,0,1, 2,0,0,0,0,0,0,0,0,1,0,0,2,0,0,2, 1,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1, 2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,2; unsigned char *patterns[4] = {(unsigned char *)0x0, c_wall1, c_wall2, c_door1; Demonstrationsövning 6 9

Rita rum : void draw_room(unsigned char *room, unsigned char **patterns) { int wall_type; int i,j; for (i = 0; i < 8; i ++) { for (j = 0; j < 16; j ++) { wall_type = room[i*16+j]; if (wall_type) draw8x8(patterns[wall_type],j+1,i+1); Demonstrationsövning 6 10

Styra spelaren: - Flytta spelaren vid knapptryck: 2,4,6,8. Repetera ej förflyttning vid nedtryckt knapp. Demonstrationsövning 6 11

Styra spelaren: - Flytta spelaren vid knapptryck: 2,4,6,8. Repetera ej förflyttning vid nedtryckt knapp. Spara knapptillstånd mellan avläsningar : unsigned char keystatus[16] = {0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0; Demonstrationsövning 6 12

int set_keyboard_status(unsigned char c, unsigned char *keystats) { int i; if (keystats[c]) return 0; /* return false */ for (i = 0; i < 16; i ++) { keystats[i] = 0; keystats[c] = 1; return 1; void clear_keyboard_status(unsigned char *keystats) { int i; for (i = 0; i < 16; i ++) { keystats[i] = 0; Demonstrationsövning 6 13

Spelarens tillstånd: int player_x = 2; /* start position x */ int player_y = 2; int player_old_x=2; /* föregående position */ int player_old_y=2; int player_moves = 0; /* försöker spelaren flytta på sig */ Demonstrationsövning 6 14

/* läs från tangentbord */ c = keyb(); /* Upp ner höger vänster? */ switch(c) { case 2: /* upp */ case 8: /* ner */ case 4: /* vänster */ case 6: /* höger */ cefault: /* någon annan knapp */ Demonstrationsövning 6 15

/* läs från tangentbord */ c = keyb(); /* Upp ner höger vänster? */ switch(c) { case 2: /* upp */ case 8: /* ner */ case 4: /* vänster */ case 6: /* höger */ cefault: /* någon annan knapp */ case 2: if (set_keyboard_status(c,keystatus)) { player_moves = 1; player_y--; else player_moves = 0; break; Demonstrationsövning 6 16

Upptäck kollision med vägg: int player_collides(unsigned char *room,int player_x, int player_y) { if (player_x > 16 player_x < 1) return 1; if (player_y > 8 player_y < 1) return 1; player_x = player_x-1; player_y = player_y-1; int index = player_y * 16 + player_x; if (room[index]) return 1; return 0; Demonstrationsövning 6 17

Hantera kollisioner: if (player_moves) { /* Är detta en tillåten förflyttning av spelaren? */ if (player_collides(room1,player_x,player_y)) { /* ej ok att gå hit */ player_x = player_old_x; player_y = player_old_y; else { erase8x8(player_avatar,player_old_x,player_old_y); player_old_x = player_x; player_old_y = player_y; draw8x8(player_avatar,player_x,player_y); Demonstrationsövning 6 18

Övrigt spelbeteende: if (!player_has_key && player_x == key_x && player_y == key_y) { /* remove key */ erase8x8(c_key,key_x,key_y); /* rita tillbaka förstörd spelare */ draw8x8(player_avatar,player_x,player_y); /* spelaren har nu nyckeln */ player_has_key = 1; if (player_has_key && player_x == 15 && player_y == 3) { yay(); Demonstrationsövning 6 19

TODO: - Fler rum. - Monster. - Förbättra kbd hanteringen. - Timing behöver justeras (hw). - Animationer. Demonstrationsövning 6 20

Demonstrationsövning 6 21