Spiludvikling

Fra HTX Arduino
Spring til navigation Spring til søgning

Udvikling af computerspil er en speciel gren inden for programmering, som dels omfatter en hel masse generel programmering, men som også handler om det at gøre noget spilbart samt at gøre spillet interessant for brugeren.

Overordnet set er der 4 elementer man skal forholde sig til, når man programmerer et spil. Det er bruger-input, der skal have en indflydelse på hvordan spillet opfører sig. Det er en data-model som bliver påvirket af bruger-inputtet. Det er spillets visning, det typisk er en tolkning af data-modellen. Endelig kan tiden have større eller mindre indflydelse på spillet, enten ved at der sker noget i spillet når tiden forløber, eller at en score som kan resultere i en highscore er afhængig af hvor hurtigt man gennemfører spillet.

Bruger-input

Det typiske bruger-input til et spil er enten musen eller tastaturet, og somme tider i kombination.

Muse-inputtet kan være muse-klik eller ganske simpelt muse-bevægelsen der styrer noget i spillet.

Taste-input kan være piletasterne / AWSD-styring, men der kan også tilføjes mange andre input der kan fx. pause spillet eller lign.

Et spil på en mobiltelefon kunne også styres af telefonens bevægelser (vip, ryst osv.). Det kunne også laves med et accelerometer på en Arduino.

Data-model

Et spils datamodel kan være meget forskellig, alt efter hvilket spil det er.

Skak vil typisk have et 2-dimensionelt array på 8 gange 8, der kan indeholde tal eller evt. tekst. Indholdet af hvert felt i arrayet svarer til et felt på skak-brættet, således at alle brikker på brættet er angivet i arrayet.

Tilsvarende vil minestryger have et 2-dimensionelt array der repræsenterer banen og igen en repræsentation af hvad der er på banen, hvor det her er miner, som både kan være skjulte og genkendte.

Man kunne umiddelbart forestille sig at snake også skulle have et 2-dimensionelt array til at repræsentere sin bane, men det giver normalt ikke den store fordel at programmere snake ud fra det - her er det bedre at have et array af punkter (kunne være et x-koordinat-array og et y-koordinat-array), som indeholder de XY-koordinater som slangens krop består af.

Spillepladen i Memory kan ligeledes være et array, enten i en eller to dimensioner, hvor der programmeringsmæssigt er både fordele og ulemper ved begge dele.

Et spil med en avatar (figur) som fx. Mario vil normalt kun have brug for en position på skærmen (X- og Y-koordinat) samt måske en hasyighed, der også kan være i både X- og Y-retningen. Derimod vil der være behov for en ganske stor data-model til at definere banens udseende

Spillets visning

Et spils visning er med til at spilleren kan spille spillet. Det ville ikke give meget mening at spille snake, hvis man ikke kunne se hvor slangens krop er henne på banen, så visningen er en grafisk fortolkning af spillets data-model.

Spillets visning er med til at gøre spillet spilbart, men visningen kan også have en æstetisk funktion, så spillet bliver flot at se på. Enkelte spil bliver endda diskuteret om de er en kunst-form.

Visningen skal synliggøre spillets tilstand, hvilket kan være mange ting. Man kan få vist sin udvikling i en spilbane (fx. hvor lang tid man har spillet) eller andre status-informationer. Man kan også indikere om spillet er i pause eller hvad der er relevant.

Tid i spil

Tiden kan have større eller mindre indflydelse på et spil.

Normalt vil tiden ikke have indflydelse på et skak-spil, og man vil slet ikke registrere det, men man kunne integrere tiden ved at begrænse hvor lang tid man havde til et gøre sit næste træk.

Til gengæld har alle spil med en eller anden form for bevægelse altid behov for at forholde sig til tid. Det betyder noget hvor lang tid der går mellem at brikken rykker en tak ned i Tetris. Samtidigt vil Tetris efterhånden blive kedeligt, hvis ikke brikke gradvist rykker sig hurtigere og hurtigere nedad.

En anden funktion af tiden kan være hvor hurtigt man kan løse fx. et puslespil, hvilket så kan omregnes til point til en highscore.

Spiludvikling - Processing
Bruger-input mousePressed() - mouseReleased() - mouseClicked() - mouseMoved() - mouseDragged() - mouseX og mouseY - mouseButton - mousePressed - keyPressed() - keyReleased() - keyTyped() - key - keyCode - keyPressed - Flere taster
Data-model Objekt Placering - Objekt Hastighed - Spilleplade - Flere Objekter - Array i Spil - 2-dimensionelt Array - Spil Hop - Highscore - Start-skærm
Visning Rektangel - Cirkel - Spilleplade - Grafikobjekter - Farver i Spil - Kollision
Spil-tid frameRate - Objekter i Bevægelse - Spilletid - Spil Opdatering - Udvikling i Tid
Objekter Objekter i Bevægelse