Kategori:Sekventiel logik og Objekt Hastighed: Forskellen mellem sider

Fra HTX Arduino
(Forskel mellem sider)
Spring til navigation Spring til søgning
ard_>Bar
No edit summary
 
No edit summary
 
Linje 1: Linje 1:
Modsat den kombinatoriske logik, så kan den sekventielle logik give forskellige logiske tilstande udgangen, med de samme logiske input - forskellen er at den sekventielle logik indeholder hukommelse i en eller anden form, normalt betegnet som en [[latch]] eller [[:kategori:flip-flop|flip-flop]].
De to eksempler her siden er de samme som bruges til [[Objekt Placering]], så beskrivelsen her fokuserer på hvordan objekterne flyttes.


Der er forskellige typer [[:kategori:flip-flop|flip-flop]], hvor de grundlæggende typer er [[D-flip-flop]], [[RS-flip-flop]], [[JK-flip-flop]] og [[Toggle-flip-flop]], der hver kan have forskellige varianter afhængigt af hvordan de reagerer indgangene.
De viste eksempler arbejder begge med en konstant hastighed, der er baseret på Processings [[frameRate]]
==Eksempel baseret på framerate==
[[fil:objektPlacering1.png|right|thumb|260px|Programmets visning af objektplacering]]
Flytningen af objektet sker ved at man lægger en Step-værdi til både posX og posY. Ved at det sker hver gang skærmen opdateres, så vil det se ud som en jævn bevægelse - dog er frameraten sat lavt, så man kan følge med i tallene, og derfor virker det som om det hakker - bare en frameRate 30 ville gøre at det ser rimeligt jævnt ud.


En anden speciel gren af hukommelse er [[Multivibrator]]er, hvor en [[Bistabil Multivibrator]] kan betragtes som en [[:kategori:flip-flop|flip-flop]] (typisk en [[Toggle-flip-flop]]), mens de to andre typer, nemlig [[Astabil Multivibrator]] og [[Monostabil Multivibrator]], indeholder en tidsfaktor, hvor den logiske tilstand kan skifte ud fra en given tid (normalt angivet ved et [[RC-led]].
I dette eksempel ændres ikke på denne step-værdi, men det ville kunne give en ændring i den hastighed objektet bevæger sig med. Et eksempel på dette kan ses i [[spil Hop|hop-eksemplet]], hvor der hele tiden ændres på y-hastigheden, mens x-hastigheden holdes konstant.


Man kan også anvende [[sekventiel logik]] til [[Logisk blokering]], ved at en hukommelse kan angive om der skal blokeres eller ej.
Hvis det bare var den generelle hastighed man ville ændre på, så kan man også ændre [[frameRate]].
<source lang="C">
int posX = 10;
int posY = 10;
int stepX = 3;
int stepY = 5;


Ved at kombinere flere [[:kategori:flip-flop|flip-flop]]er kan man danne forskellige standardkredsløb af generel karakter som [[Binær counter]], [[BCD-counter]], [[Digital tæller]], [[skifteregister]] og [[Digital hukommelse]], hvor den sidste kan arbejde med [[Hukommelses-Data]] placeret på [[Hukommelses-Adresser]].
void setup() {
  size(400, 200);
  frameRate(10);
}


{{logik-begreber}}
void draw() {
  background(0);
  fill(255);
  text("X : " + posX, 320, 30);
  text("Y : " + posY, 320, 60);
  ellipse(posX, posY, 20, 20);
  posX += stepX;
  if (posX < 10 || posX > width - 10) {
    stepX *= -1;
  }
  posY += stepY;
  if (posY < 10 || posY > height - 10) {
    stepY *= -1;
  }
}
</source>


[[Kategori:Sekventiel logik]]
==Eksempel ud fra en data-model==
[[fil:objektPlacering2.png|right|thumb|220px|Programmets visning af objektplacering]]
I dette eksempel arbejdes med en datamodel, som er et [[2-dimensionelt Array]].
 
Bevægelsen sker igen ved at rykke på brikken for hver frame.
 
Datamodellen binder objektet, så man ikke kan ændre på hvor langt brikken rykkes i hver frame, det vil kun give mening at rykke en ad gangen.
 
Hvis man ønsker at ændre hastigheden, så er muligheden her at ændre [[frameRate]]
<source lang="C">
 
int xWidth = 10;
int yHeight = 20;
int xSize = 15;
int ySize = 15;
int xPos = int(random(xWidth));
int yPos = 0;
int [][] bane = new int [xWidth][yHeight];
void setup() {
  for (int n = 0; n < xWidth; n++) {
    for (int i = 0; i < yHeight; i++) {
      bane[n][i] = 0;
    }
  }
  size(220, 420);
  strokeWeight(2);
  frameRate(10);
  textSize(20);
}
 
void draw() {
  background(255);
  for (int n = 0; n < xWidth; n++) {
    for (int i = 0; i < yHeight; i++) {
      if (bane[n][i] == 1) {
        fill(180);
        rect(n*(xSize + 5) + 10, i*(ySize + 5) + 10, xSize, ySize);
      }
    }
  }
  fill(180);
  rect(xPos*(xSize + 5) + 10, yPos*(ySize + 5) + 10, xSize, ySize);
  fill(0);
  text("X : " + xPos, 160, 30);
  text("Y : " + yPos, 160, 60);
  yPos++;
  if (yPos == yHeight - 1) {
    bane[xPos][yPos] = 1;
    newObject();
  } else if (bane[xPos][yPos+1] == 1) { 
    bane[xPos][yPos] = 1;
    newObject();
  }
}
 
void newObject() {
  yPos = 0;
  xPos = int(random(xWidth));
  if (bane[xPos][yPos+1] == 1) {
    exit();
  }
}
</source>
 
==Referencer==
<references />
{{Spiludvikling}}
 
[[Kategori:Spil_Data-model]]

Nuværende version fra 21. okt. 2022, 11:18

De to eksempler her på siden er de samme som bruges til Objekt Placering, så beskrivelsen her fokuserer på hvordan objekterne flyttes.

De viste eksempler arbejder begge med en konstant hastighed, der er baseret på Processings frameRate

Eksempel baseret på framerate

Programmets visning af objektplacering

Flytningen af objektet sker ved at man lægger en Step-værdi til både posX og posY. Ved at det sker hver gang skærmen opdateres, så vil det se ud som en jævn bevægelse - dog er frameraten sat lavt, så man kan følge med i tallene, og derfor virker det som om det hakker - bare en frameRate på 30 ville gøre at det ser rimeligt jævnt ud.

I dette eksempel ændres ikke på denne step-værdi, men det ville kunne give en ændring i den hastighed objektet bevæger sig med. Et eksempel på dette kan ses i hop-eksemplet, hvor der hele tiden ændres på y-hastigheden, mens x-hastigheden holdes konstant.

Hvis det bare var den generelle hastighed man ville ændre på, så kan man også ændre frameRate.

int posX = 10;
int posY = 10;
int stepX = 3;
int stepY = 5;

void setup() {
  size(400, 200);
  frameRate(10);
}

void draw() {
  background(0);
  fill(255);
  text("X : " + posX, 320, 30);
  text("Y : " + posY, 320, 60);
  ellipse(posX, posY, 20, 20);
  posX += stepX;
  if (posX < 10 || posX > width - 10) {
    stepX *= -1;
  }
  posY += stepY;
  if (posY < 10 || posY > height - 10) {
    stepY *= -1;
  }
}

Eksempel ud fra en data-model

Programmets visning af objektplacering

I dette eksempel arbejdes med en datamodel, som er et 2-dimensionelt Array.

Bevægelsen sker igen ved at rykke på brikken for hver frame.

Datamodellen binder objektet, så man ikke kan ændre på hvor langt brikken rykkes i hver frame, det vil kun give mening at rykke en ad gangen.

Hvis man ønsker at ændre hastigheden, så er muligheden her at ændre frameRate

int xWidth = 10;
int yHeight = 20;
int xSize = 15;
int ySize = 15;
int xPos = int(random(xWidth));
int yPos = 0;
int [][] bane = new int [xWidth][yHeight];
void setup() {
  for (int n = 0; n < xWidth; n++) {
    for (int i = 0; i < yHeight; i++) {
      bane[n][i] = 0;
    }
  }
  size(220, 420);
  strokeWeight(2);
  frameRate(10);
  textSize(20);
}

void draw() {
  background(255);
  for (int n = 0; n < xWidth; n++) {
    for (int i = 0; i < yHeight; i++) {
      if (bane[n][i] == 1) {
        fill(180);
        rect(n*(xSize + 5) + 10, i*(ySize + 5) + 10, xSize, ySize);
      }
    }
  }
  fill(180);
  rect(xPos*(xSize + 5) + 10, yPos*(ySize + 5) + 10, xSize, ySize);
  fill(0);
  text("X : " + xPos, 160, 30);
  text("Y : " + yPos, 160, 60);
  yPos++;
  if (yPos == yHeight - 1) {
    bane[xPos][yPos] = 1;
    newObject();
  } else if (bane[xPos][yPos+1] == 1) {  
    bane[xPos][yPos] = 1;
    newObject();
  }
}

void newObject() {
  yPos = 0;
  xPos = int(random(xWidth));
  if (bane[xPos][yPos+1] == 1) {
    exit();
  }
}

Referencer

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

Underkategorier

Denne kategori har kun den følgende underkategori:

M

Sider i kategorien "Sekventiel logik"

De 4 følgende sider er i denne kategori, ud af i alt 4: