Avatar billede ducks Nybegynder
12. april 2005 - 02:14 Der er 20 kommentarer og
1 løsning

Brug af piletaster

Hvordan er det nu lige at man bruger piletasterne til at styre et object på skærmen (i windows konsolen) og hvordan trækker jeg bitmap billeder ind? Håber ikke det blev for kort.
Avatar billede bertelbrander Novice
12. april 2005 - 02:25 #1
Tag et kik på GetChar() i:
http://home20.inet.tele.dk/midgaard/snip/pacman.html

Den returnerer en VK_LEFT, VK_RIGHT, ...

Bitmap billeder i en konsol?
Avatar billede ducks Nybegynder
12. april 2005 - 02:42 #2
Hmm ja, det lyder sq lidt mystisk med bitmap i konsol, det kan jeg godt se :p -- Men det er nok mere den måde spil som Atomic Bomberman er sat op på med bitmap billeder og sådan noget, jeg tænkte på.


Mht. GetChar(), så tror jeg ikke helt jeg har fået fat i, hvordan den fungerer:

#include <iostream.h>

char arrow;

int main () {
    GetChar(arrow);
    cout << arrow;
    return 0;
}
Avatar billede bertelbrander Novice
12. april 2005 - 02:47 #3
GetChar returnerer tasten, det bør være en int:
int Key = GetChar();
if(Key == VK_LEFT)
  FlytTilVenstre();

Du kan også bruge IsKeyPressed:
if(IsKeyPressed(VK_LEFT))
  FlytTilVenstre();

IsKeyPressed(key) vil returnere true sålænge key et trykket ned.
Avatar billede ducks Nybegynder
12. april 2005 - 03:02 #4
Hvis jeg kigger i dokumentationen i programmet, står der

getChar
Returns a character at a particular index in the string object.

public:

virtual char getChar(
    unsigned int index) const;

Parameter Descriptions
index
The index into the string.
function result
Returns a character.


-----
Jeg har prøvet dit eksempel, men jeg kan overhovedet ikke få noget til at hænge sammen lige nu :/

#include <stdio.h>

int Key;

int main () {
    Key = getChar();
    SYSTEM("PAUSE");
    cout << Key;
    return 0;
}
Avatar billede nlf Nybegynder
12. april 2005 - 10:00 #5
Med hensyn til billederne, så er der formentlig bare brugt interrupt 13, som åbner op for direkte skrivning til skærmens "frame-buffer" i en opløsning på 320x240.
Har ikke lige kigget meget mere på det, men det skulle vist også være muligt i ren C (i modsætning til Assembly, som der formentlig blev brugt i Bomberman).
Avatar billede ducks Nybegynder
12. april 2005 - 15:23 #6
Men hvordan kan det være at jeg får fejl i getChar hele tiden?
Avatar billede nlf Nybegynder
12. april 2005 - 16:02 #7
Hvilken fejl får du? (det hjælper altså en del at du også beskrive fejlen, hvis du melder om en sådan)

Jeg ved ikke lige hvilken compiler du benytter, men standard funktionen fra stdio.h hedder i hvert fald getchar (og da C case-sensitive, så er både getChar og GetChar ugyldigt).
Avatar billede bertelbrander Novice
12. april 2005 - 19:39 #8
getchar() er standard funktionen der findes for alle standard C og C++ kompilere.
Den har den ulempe at den kræver at man trykker enter efter at man har trykket på tasten. getchar() kan ikke bruges til at læse piletaster.

GetChar er en funktion jeg har lavet til den kode jeg linker til. Den kræver at man inkluderer windows.h og putter funktionen ind i sin egen kode.

Jeg ved ikke hvor getChar kommer fra.
Avatar billede ducks Nybegynder
12. april 2005 - 21:29 #9
"GetChar er en funktion jeg har lavet til den kode jeg linker til. Den kræver at man inkluderer windows.h og putter funktionen ind i sin egen kode."

"Jeg ved ikke hvor getChar kommer fra."

Hvordan skal det forstås? Og det må da være muligt uden at have adgang til windows.h
Avatar billede ducks Nybegynder
12. april 2005 - 21:30 #10
Hov.. så lige at den ene er med stort G og den anden med lille g
Avatar billede bertelbrander Novice
12. april 2005 - 21:34 #11
Ikke forstået. Hvad er det der må være muligt uden windows.h?
Avatar billede ducks Nybegynder
13. april 2005 - 00:57 #12
At bruge piletasterne
Avatar billede bertelbrander Novice
13. april 2005 - 00:59 #13
Det er ikke muligt at aflæse piletasterne med standard C++.
Avatar billede bertelbrander Novice
13. april 2005 - 01:03 #14
Nogle kompilere har en getch(), der måske kan bruges.
Hvilken kompiler buger du?
Avatar billede ducks Nybegynder
13. april 2005 - 01:51 #15
Den der er i Dev-Cpp, jeg ved ikke lige om det er en bestemt compiler :/
Avatar billede bertelbrander Novice
13. april 2005 - 01:56 #16
Dev-Cpp bruger normalt MinGW.

Prøv denne og se hvad der sker når du trykker på piletasterne:

#include <conio.h>
#include <iostream>

int main()
{
  int Key;
  std::cout << "Hit q to quit" << std::endl;
  do
  {
      Key = getch();
      std::cout << "Key: " <<  Key << std::endl;
  }
  while(Key != 'q');
  return 0;
}

Hos mig give pil ned 224 og 80.
Avatar billede ducks Nybegynder
13. april 2005 - 04:21 #17
Sådan nu virker det.

Hvor finder jeg tutorials der viser hvordan jeg laver noget nogenlunde det pacman der?
Avatar billede bertelbrander Novice
13. april 2005 - 20:12 #18
Jeg tvivler på at du finder nogen videre tutorial til den slags.

Det er blot nogle tegn der flytter rundt på skærmen. Algoritmen der får # er det eneste der er lidt avanceret.

Du kan prøve om du kan finde noget her:
http://www.gamedev.net/
Avatar billede ducks Nybegynder
27. april 2005 - 16:04 #19
Point bertelbrander?
Avatar billede bertelbrander Novice
27. april 2005 - 19:26 #20
Nej tak, jeg samler ikke.
Avatar billede ducks Nybegynder
27. april 2005 - 19:30 #21
.
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
Kurser inden for grundlæggende programmering

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