Quantcast
Channel: Arduboy - Latest topics
Viewing all 3333 articles
Browse latest View live

Arduboy games play through on YouTube

$
0
0

@Bart_Kamski wrote:

Hi there,

Few days ago I bought my Arduboy. I was so excited playing those awesome, 8-bit games that I record a YouTube video. I even constructed special stand for my Arduboy so it wouldn’t be shaky in the camera :smiley: Check it out: https://youtu.be/H1ASFG6qYRg

Posts: 2

Participants: 2

Read full topic


It's Finally Here!

$
0
0

@DWidel wrote:

It’s a great day for Arduboy gaming. The best selling game of the classic game era is finally available. I hope you all have some vacation time accrued as you’ll want to take time off to play this. This was an arcade port of not just one but two different arcade games. Without further ado I present CX2601 Combat!.

I spent sooo many hours playing this ground breaking classic game. Every gamer I knew had a copy of this. (With the exception of some poor sap that got stuck with an Intellivision.) This also introduced Atari’s famous mascots: Left Tank, and Right Tank. I understand some rich people with color televisions knew them by their nicknames “Red” and “Blue” but probably the less said about that on this forum the better.

Being 2 player only this presented some er… challenges. I decided to go with a turn based system. When the LED is red the left tank is controlled, when the LED changes to blue the right tank can play. I know what you’re thinking, “That’s not ADA compliant!” But, I think we are OK. If you look closely they are separate LED’s; so the color blind among us will just have to pay closer attention.

There’s not enough buttons so I’m using B as shift. Shift A is start and Shift Up is select. I should have done Shift something for difficulty but I didn’t think of it until just now.

Dave

Combat.ino.leonardo.hex (77.8 KB)

Posts: 5

Participants: 3

Read full topic

Google Chrome Released For Arduboy!

$
0
0

@crait wrote:

Google Chrome For Arduboy

Hey, guys! Ever been interested in browsing websites directly from the Arduboy? Download my port of Google Chrome and use the Arduboy’s built-in Wi-Fi to access millions of websites, including Facebook, Twitter, Yahoo, Ask Jeeves… So much! :smiley:

Download it, here: http://crait.net/download.php?file=chromeforarduboy

Posts: 4

Participants: 4

Read full topic

Hello Im new to programing on arduboy and I tried to get some colision working but I cant. Help please!

$
0
0

@AlexToma wrote:

Hello Im new to programing on arduboy and I tried to get some colision working but I cant.
I want to make a game where you are a square and you have to shoot enemys.
I wanted to make a colision with the bulet and the enemy.
For now I only programed it so that when you shoot from the right side of the enemy and if the bulet hits, it goes back to your gun.
But for some reason some of the bullets hit the enemy(just when shooting from the right to the left hiting enemy´s right side) and some not… it´s very wierd. Im sory for my bad english.
I really need your help to fix this
Here is my code so far:

#include<Arduboy2.h>
Arduboy2 arduboy;

int blockwidth = 10;
int blockheight = 10;
float blockx = 0;
float blocky = 0;
int right = 0;
int down = 0;
float enemyx = 10;
float enemyy = 10;
int counter = 0;
int gunwidth = 3;
int gunheight = 5;
float gunx = 0;
float guny = 0;
int buletwidth = 2;
int buletheight = 3;
float buletx = 0;
float bulety = 0;
int playerdirection = 0;
int buletdirection = 0;
int buletdone = 0;

const unsigned char PROGMEM background[] = {
// width, height,
8, 8,
0x81, 0x00, 0x12, 0x40, 0x04, 0x11, 0x00, 0x04, 
};
const unsigned char PROGMEM enemy[] =
{
// width, height,
16, 16,
0xfe, 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x01, 0x01, 0xc1, 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x01, 0xfe, 
0x7f, 0x80, 0x9c, 0xbc, 0xb0, 0xb0, 0xb2, 0xb2, 0xb3, 0xb0, 0xb0, 0xb0, 0xbc, 0x9c, 0x80, 0x7f, 
};

void setup(){
  arduboy.begin();
  arduboy.setFrameRate(60);
  arduboy.initRandomSeed();
  arduboy.display();

  blockx = WIDTH / 2 - blockwidth / 2;
  blocky = HEIGHT / 2 - blockheight / 2;
  gunx = WIDTH / 2 - gunwidth / 2;
  guny = HEIGHT / 2 - gunwidth / 2;
  buletx = gunx;
  bulety = guny;
  buletdone = 2;
}

void renderBlock(){
  arduboy.fillRect(blockx,blocky,blockwidth, blockheight);
}

void handleGameInput() {
  if (arduboy.pressed(LEFT_BUTTON)) {
    blockx -= 1,5;
    if (blockx < 0) {
      blockx = 0;
    }
    gunx = blockx -5;
    guny = blocky;
    if(buletdirection == 0){
      buletx = gunx;
      bulety = guny;
    }
    playerdirection = 1;
    gunwidth = 5;
    gunheight = 3;
    buletmove();
  } if (arduboy.pressed(RIGHT_BUTTON)) {
    blockx += 1,5;
    if (blockx + blockwidth > WIDTH) {
      blockx = WIDTH - blockwidth;
    }
    gunx = blockx +10;
    guny = blocky;
    if(buletdirection == 0){
      buletx = gunx;
      bulety = guny;
    }
    playerdirection = 2;
    gunwidth = 5;
    gunheight = 3;
    buletmove();
  }
  if (arduboy.pressed(UP_BUTTON)){
    blocky -= 1,5;
    if (blocky < 0){
      blocky = 0;
    }
    guny = blocky - 5;
    gunx = blockx;
    if(buletdirection == 0){
      buletx = gunx;
      bulety = guny;
    }
    playerdirection = 3;
    gunwidth = 3;
    gunheight = 5;
    buletmove();
  }
  if (arduboy.pressed(DOWN_BUTTON)){
    blocky += 1,5;
    if (blocky + blockheight > HEIGHT) {
      blocky = HEIGHT - blockheight;
    }
    guny = blocky +10;
    gunx = blockx;
     if(buletdirection == 0){
      buletx = gunx;
      bulety = guny;
    }
    playerdirection = 4;
    gunwidth = 3;
    gunheight = 5;
    buletmove();
  }
  
}
void renderenemy(){
  counter = counter +1;
  if(enemyx < 0){
    enemyx = 0;
  }
  if(enemyx > 112){
    enemyx = 112;
  }
  if(enemyy < 0){
    enemyy = 0;
  }
  if(enemyy > 48){
    enemyy = 48;
  }
  if(right == 2){
    enemyx = enemyx +0.5;  
  }
  if(right == 1){
    enemyx = enemyx -0.5;
  }
  if(down == 2){
    enemyy = enemyy +0.5;
  }
  if(down == 1){
    enemyy = enemyy -0.5;
  }
  if(counter == 25){
    right = random(1,4);
    down = random(1,4);
    counter = 0;
  }
  Sprites::drawOverwrite(enemyx, enemyy, enemy, 0);
}

void gun(){
  arduboy.fillRect(gunx,guny,gunwidth,gunheight);
  arduboy.fillRect(buletx,bulety,buletwidth,buletheight);
}

void buletmove(){
  if (playerdirection == 1){
    if(buletdone == 2){
      if(arduboy.pressed(A_BUTTON)){
        buletdirection = 1;
      }
    }
  }
  if (playerdirection == 2){
    if(buletdone == 2){
      if(arduboy.pressed(A_BUTTON)){
        buletdirection = 2;
      }
    }
  }
  if (playerdirection == 3){
    if(buletdone == 2){
      if(arduboy.pressed(A_BUTTON)){
        buletdirection = 3;
      }
    }
  }
  if (playerdirection == 4){
    if(buletdone == 2){
      if(arduboy.pressed(A_BUTTON)){
        buletdirection = 4;
      }
    }
  }
  buletmove1();
}

void buletmove1(){
  if(buletdirection == 1){
    buletdone = 1;
    buletwidth = 3;
    buletheight = 2;
    buletx = buletx -2;
    if(buletx < -3){
      buletx = gunx;
      bulety = guny;
      buletdirection = 0;
      buletdone = 2;
    }
    if(buletx == enemyx + 16 && enemyy < bulety + buletheight && enemyy + 16 > bulety){
      buletx = gunx;
      bulety = guny;
      buletdirection = 0;
      buletdone = 2;
    }
  }
  if(buletdirection == 2){
    buletdone = 1;
    buletwidth = 3;
    buletheight = 2;
    buletx = buletx +2;
    if(buletx > 131){
      buletdone = 2;
      buletx = gunx;
      bulety = guny;
      buletdirection = 0;
    }
  }
  if(buletdirection == 3){
    buletdone = 1;
    buletwidth = 2;
    buletheight = 3;
    bulety = bulety -2;
    if(bulety < -3){
      buletdone = 2;
      buletx = gunx;
      bulety = guny;
      buletdirection = 0;
    }
  }
  if(buletdirection == 4){
    buletdone = 1;
    buletwidth = 2;
    buletheight = 3;
    bulety = bulety +2;
    if(bulety > 67){
      buletdone = 2;
      buletx = gunx;
      bulety = guny;
      buletdirection = 0;
    }
  }
}

void colisionenemy(){
  
}

void loop() {
  if(!arduboy.nextFrame()) return;

  arduboy.clear();
  arduboy.pollButtons();
  //=====================
  //For each column on the screen
  for (int backgroundx = 0; backgroundx < 128; backgroundx = backgroundx + 8) {
  //For each row in the column
    for ( int backgroundy = 0; backgroundy < 64; backgroundy = backgroundy + 8) {
      //Draw a background tile
      Sprites::drawOverwrite(backgroundx, backgroundy, background, 0);
    }
  }
  renderBlock();
  handleGameInput();
  renderenemy();
  gun();
  buletmove();

  //=====================
  arduboy.display();

}

Posts: 13

Participants: 5

Read full topic

Space Invaders Clone Issue

$
0
0

@Steve_Daly wrote:

Hi all,

Quick question but probably not a quick solution. When I test the code out ‘Space Invaders clone’ on Project ABE I can clearly see the Tank Missiles but when I load it into Arduboy they vanish but still blow up the invaders. I cant slow the speed of the missiles down so I can see them, even if I mess with the frame rate. Any ideas - take it easy on my coding… I am completing a tutorials from a few different places, so it probably looks more like a patch work quilt :(.
Any guidance would be great !

Working code in Project ABE with visible missiles

Space Invaders clone.hex (24.5 KB)

    /*   Adapted from Xtronical Space Invaders Tutorial
*/
#include <Arduboy2.h>
Arduboy2 arduboy;

// DISPLAY SETTINGS

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

// Input settings
#define FIRE_BUT 7
#define RIGHT_BUT A1
#define LEFT_BUT A2

// Alien Settings
#define NUM_ALIEN_COLUMNS 7
#define NUM_ALIEN_ROWS 3
#define X_START_OFFSET 6
#define SPACE_BETWEEN_ALIEN_COLUMNS 5
#define LARGEST_ALIEN_WIDTH 11
#define SPACE_BETWEEN_ROWS 9
#define INVADERS_DROP_BY 4            // pixel amount that invaders move down by
#define INVADERS_SPEED 20             // speed of movement, lower=faster.
#define INVADER_HEIGHT 8

// Player settingsc
#define TANKGFX_WIDTH 13
#define TANKGFX_HEIGHT 8
#define PLAYER_X_MOVE_AMOUNT 1
#define PLAYER_Y_START 56
#define PLAYER_X_START 0

#define MISSILE_HEIGHT 4
#define MISSILE_WIDTH 1
#define MISSILE_SPEED 1

// Status of a game object constants
#define ACTIVE 0
#define DESTROYED 2

// graphics
// aliens

const unsigned char InvaderTopGfx [] PROGMEM = {
  0x98, 0x5c, 0xb6, 0x5f, 0x5f, 0xb6, 0x5c, 0x98
};

const unsigned char InvaderTopGfx2 [] PROGMEM = {
  0x58, 0xbc, 0x16, 0x1f, 0x1f, 0x16, 0xbc, 0x58
};

const unsigned char PROGMEM InvaderMiddleGfx [] =
{
  0x1e, 0xb8, 0x7d, 0x36, 0x3c, 0x3c, 0x3c, 0x36, 0x7d, 0xb8, 0x1e
};

const unsigned char PROGMEM InvaderMiddleGfx2 [] = {
  0x78, 0x18, 0x7d, 0xb6, 0xbc, 0x3c, 0xbc, 0xb6, 0x7d, 0x18, 0x78
};

const unsigned char PROGMEM InvaderBottomGfx [] = {
  0x1c, 0x5e, 0xfe, 0xb6, 0x37, 0x5f, 0x5f, 0x37, 0xb6, 0xfe, 0x5e, 0x1c
};

const unsigned char PROGMEM InvaderBottomGfx2 [] = {
  0x9c, 0xde, 0x7e, 0x36, 0x37, 0x5f, 0x5f, 0x37, 0x36, 0x7e, 0xde, 0x9c
};

// Player grafix
const unsigned char PROGMEM TankGfx [] = {
  0xf0, 0xf8, 0xf8, 0xf8, 0xf8, 0xfe, 0xff, 0xfe, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0
};

static const unsigned char PROGMEM MissileGfx [] = {
  0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

};


// Game structures

struct GameObjectStruct  {
  // base object which most other objects will include
  signed int X;
  signed int Y;
  unsigned char Status;  //0 active, 1 exploding, 2 destroyed
};

struct AlienStruct  {
  GameObjectStruct Ord;
};

struct PlayerStruct  {
  GameObjectStruct Ord;
};

//alien global vars
//The array of aliens across the screen
AlienStruct  Alien[NUM_ALIEN_COLUMNS][NUM_ALIEN_ROWS];


// widths of aliens
// as aliens are the same type per row we do not need to store their graphic width per alien in the structure above
// that would take a byte per alien rather than just three entries here, 1 per row, saving significnt memory
byte AlienWidth[] = {8, 11, 12}; // top, middle ,bottom widths


char AlienXMoveAmount = 1; // norm is 2 , this is pixel movement in X
signed char InvadersMoveCounter;            // counts down, when 0 move invaders, set according to how many aliens on screen
bool AnimationFrame = false; // two frames of animation, if true show one if false show the other


// Player global variables
PlayerStruct Player;
GameObjectStruct Missile;


void setup()
{
  arduboy.begin();
  arduboy.setFrameRate(60);

  InitAliens(0);
  InitPlayer();

  pinMode(RIGHT_BUT, INPUT_PULLUP);
  pinMode(LEFT_BUT, INPUT_PULLUP);
  pinMode(FIRE_BUT, INPUT_PULLUP);

}

void loop()
{
  if (!arduboy.nextFrame()) {
    return;
  }

  Physics();
  UpdateDisplay();

}

void Physics()  {
  AlienControl();
  PlayerControl();
  MissileControl();
  CheckCollisions();
}


void PlayerControl()  {
  // user input checks
  if ((digitalRead(RIGHT_BUT) == 0) & (Player.Ord.X + TANKGFX_WIDTH < SCREEN_WIDTH))
    Player.Ord.X += PLAYER_X_MOVE_AMOUNT;
  if ((digitalRead(LEFT_BUT) == 0) & (Player.Ord.X > 0))
    Player.Ord.X -= PLAYER_X_MOVE_AMOUNT;
  if ((digitalRead(FIRE_BUT) == 0) & (Missile.Status != ACTIVE))
  {
    Missile.X = Player.Ord.X + (6); // offset missile so its in the mideel of the tank
    Missile.Y = PLAYER_Y_START;
    Missile.Status = ACTIVE;

  }
}

void MissileControl()
{
  if (Missile.Status == ACTIVE)
  {
    Missile.Y -= MISSILE_SPEED;
    if (Missile.Y + MISSILE_HEIGHT < 0)  // If off top of screen destroy so can be used again
      Missile.Status = DESTROYED;
  }
}


void AlienControl()
{
  if ((InvadersMoveCounter--) < 0)
  {
    bool Dropped = false;
    if ((RightMostPos() + AlienXMoveAmount >= SCREEN_WIDTH) | (LeftMostPos() + AlienXMoveAmount < 0)) // at edge of screen
    {
      AlienXMoveAmount = -AlienXMoveAmount;             // reverse direction
      Dropped = true;                                   // and indicate we are dropping
    }
    // update the alien postions
    for (int Across = 0; Across < NUM_ALIEN_COLUMNS; Across++)
    {
      for (int Down = 0; Down < 3; Down++)
      {
        if (Alien[Across][Down].Ord.Status == ACTIVE)
        {
          if (Dropped == false)
            Alien[Across][Down].Ord.X += AlienXMoveAmount;
          else
            Alien[Across][Down].Ord.Y += INVADERS_DROP_BY;
        }
      }
    }
    InvadersMoveCounter = INVADERS_SPEED;
    AnimationFrame = !AnimationFrame; ///swap to other frame
  }
}


void CheckCollisions()
{
  MissileAndAlienCollisions();
}


void MissileAndAlienCollisions()
{
  for (int across = 0; across < NUM_ALIEN_COLUMNS; across++)
  {
    for (int down = 0; down < NUM_ALIEN_ROWS; down++)
    {
      if (Alien[across][down].Ord.Status == ACTIVE)
      {
        if (Missile.Status == ACTIVE)
        {
          if (Collision(Missile, MISSILE_WIDTH, MISSILE_HEIGHT, Alien[across][down].Ord, AlienWidth[down], INVADER_HEIGHT))
          {
            // missile hit
            Alien[across][down].Ord.Status = DESTROYED;
            Missile.Status = DESTROYED;
          }
        }
      }
    }
  }
}

bool Collision(GameObjectStruct Obj1, unsigned char Width1, unsigned char Height1, GameObjectStruct Obj2, unsigned char Width2, unsigned char Height2)
{
  return ((Obj1.X + Width1 > Obj2.X) & (Obj1.X < Obj2.X + Width2) & (Obj1.Y + Height1 > Obj2.Y) & (Obj1.Y < Obj2.Y + Height2));
}

int RightMostPos()  {
  //returns x pos of right most alien
  int Across = NUM_ALIEN_COLUMNS - 1;
  int Down;
  int Largest = 0;
  int RightPos;
  while (Across >= 0) {
    Down = 0;
    while (Down < NUM_ALIEN_ROWS) {
      if (Alien[Across][Down].Ord.Status == ACTIVE)
      {
        // different aliens have different widths, add to x pos to get rightpos
        RightPos = Alien[Across][Down].Ord.X + AlienWidth[Down];
        if (RightPos > Largest)
          Largest = RightPos;
      }
      Down++;
    }
    if (Largest > 0) // we have found largest for this coloum
      return Largest;
    Across--;
  }
  return 0;  // should never get this far
}

int LeftMostPos()  {
  //returns x pos of left most alien
  int Across = 0;
  int Down;
  int Smallest = SCREEN_WIDTH * 2;
  while (Across < NUM_ALIEN_COLUMNS) {
    Down = 0;
    while (Down < 3) {
      if (Alien[Across][Down].Ord.Status == ACTIVE)
        if (Alien[Across][Down].Ord.X < Smallest)
          Smallest = Alien[Across][Down].Ord.X;
      Down++;
    }
    if (Smallest < SCREEN_WIDTH * 2) // we have found smalest for this coloum
      return Smallest;
    Across++;
  }
  return 0;  // should never get this far
}

void UpdateDisplay()
{
  arduboy.clear();
  for (int across = 0; across < NUM_ALIEN_COLUMNS; across++)
  {
    for (int down = 0; down < NUM_ALIEN_ROWS; down++)
    {
      if (Alien[across][down].Ord.Status == ACTIVE) {
        switch (down)  {
          case 0:
            if (AnimationFrame)
              arduboy.drawBitmap(Alien[across][down].Ord.X, Alien[across][down].Ord.Y,  InvaderTopGfx, AlienWidth[down], INVADER_HEIGHT, WHITE);
            else
              arduboy.drawBitmap(Alien[across][down].Ord.X, Alien[across][down].Ord.Y,  InvaderTopGfx2, AlienWidth[down], INVADER_HEIGHT, WHITE);
            break;
          case 1:
            if (AnimationFrame)
              arduboy.drawBitmap(Alien[across][down].Ord.X, Alien[across][down].Ord.Y,  InvaderMiddleGfx, AlienWidth[down], INVADER_HEIGHT, WHITE);
            else
              arduboy.drawBitmap(Alien[across][down].Ord.X, Alien[across][down].Ord.Y,  InvaderMiddleGfx2, AlienWidth[down], INVADER_HEIGHT, WHITE);
            break;
          default:
            if (AnimationFrame)
              arduboy.drawBitmap(Alien[across][down].Ord.X, Alien[across][down].Ord.Y,  InvaderBottomGfx, AlienWidth[down], INVADER_HEIGHT, WHITE);
            else
              arduboy.drawBitmap(Alien[across][down].Ord.X, Alien[across][down].Ord.Y,  InvaderBottomGfx2, AlienWidth[down], INVADER_HEIGHT, WHITE);
        }
      }
    }
  }

  // player
  arduboy.drawBitmap(Player.Ord.X, Player.Ord.Y,  TankGfx, TANKGFX_WIDTH, TANKGFX_HEIGHT, WHITE);
  //missile
  if (Missile.Status == ACTIVE)
    arduboy.drawBitmap(Missile.X, Missile.Y,  MissileGfx, MISSILE_WIDTH, MISSILE_HEIGHT, WHITE);

  arduboy.display();
}


void InitPlayer()  {
  Player.Ord.Y = PLAYER_Y_START;
  Player.Ord.X = PLAYER_X_START;
  Missile.Status = DESTROYED;
}

void InitAliens(int YStart)  {
  for (int across = 0; across < NUM_ALIEN_COLUMNS; across++)  {
    for (int down = 0; down < 3; down++)  {
      // we add down to centralise the aliens, just happens to be the right value we need per row!
      // we need to adjust a little as row zero should be 2, row 1 should be 1 and bottom row 0
      Alien[across][down].Ord.X = X_START_OFFSET + (across * (LARGEST_ALIEN_WIDTH + SPACE_BETWEEN_ALIEN_COLUMNS)) - (AlienWidth[down] / 2);
      Alien[across][down].Ord.Y = YStart + (down * SPACE_BETWEEN_ROWS);
    }
  }
}

Posts: 7

Participants: 2

Read full topic

E-Paper Matrix Game

$
0
0

@bateske wrote:

Imagine a little e paper iot widget in a durable case.

Yeah, you can’t play any fast paced games, but you can play slow ones, but more importantly it’s about sharing information. This can be the perfect little controller for ANY smart system.

Think of it like like a logitech smart remote, but more like a key fob, and its truly universal.

I think this is the answer. It’s a different product, it’s not meant for fast games. Fast games could use OLED…

Could theoretically be two forks? Could the code be written for two libraries, whether you have the OLED version or the EPaper version?

Posts: 6

Participants: 3

Read full topic

Official Homemade Arduboy Kit?

$
0
0

@bateske wrote:

What if, I did a mini-kickstarter for these kits… take orders now and then do a bulk order from china, kit them together and offer them with a polished up instructions and the lessons?

Would anyone be interested?

  • I’m interested in pre-ordering a kit
  • Nah man I’m good
  • I will literally buy anything you ask me to
  • Can you please just make the Arduboy Mini

0 voters

Posts: 12

Participants: 6

Read full topic

ArduWideBoy

$
0
0

@gas wrote:

Finally I have fully functioning Arduboy! Thanks to all who helped, and to all community for ideas and inspiration.
It is Pro Micro + Flash (5V operated) + 2.42 ssd1309 screen.

Next step is 3d printed enclosure…

Posts: 2

Participants: 2

Read full topic


After upload, my Mac don’t recognize Arduboy

$
0
0

@Treehouse wrote:

Hi, I’ve an arduboy since two year, but yesterday, after uploaded a game (Mini Rogue) the Arduboy don’t appear on the Door List; I’ve tried with “recovery mode” but nothing.
If I connect my arduboy the red light is turn off after one second; with the recovery mode the red light is turn on, but my computer don’t recognize the Arduboy. I’ve the last version of OS X and the last version of Arduino (I’ve tried with beta version, but don’t change the situation).
I’ve tried with different computer and OS, but nothing.

I’m sorry for my English, thank you for the help

Posts: 3

Participants: 2

Read full topic

Still yet another Arduboy Clone

Development Ends

$
0
0

@bateske wrote:

People have taken massive dumps on every idea I’ve had to come up with a new version of the Arduboy so I’ve officially given up. Everyone wants something a little different and there is no way to make everyone happy. It’s clear to me now that the original Arduboy success was a fluke due to the media attention it received. There is no clear way to sell 10,000 units of a new product, which is the minimum number required to start production.

A majority of the customers did not want to use it as development tool, most people thought it was just a cute thing to have. Only about 20% of customers even visit the forums.

As many have noted there are a handful of other game development platforms, so I’m just not going to compete.

I’ll work on the Arduboy mini, the FX, and the kit but otherwise I’m done doing development.

Posts: 4

Participants: 3

Read full topic

New maycar Arduboy- think this is Dev kit but struggling

$
0
0

@Villager_guy135 wrote:

Hi- my Mum and I are trying to get my new Maycar arduboy to work- it was one we assembled. To start with it was ok- we followed the guides and got it to recognise the port, and run the example ‘hello world’ Sketch. Then tried to upload a new game, and now nothing is working. We think we have got the sketch correct into the sketchbook, as when we verify the sketch, it looks ok. But it no longer recognises the port when we connect the arduboy. We looked at the how to reset the dev kit instructions, but the photos that demonstrate the places to short won’t load, so we can’t see the pictures. Have tried viewing in various web browsers- chrome, safari etc, but can’t see the pictures. Nothing shows on the arduboy now, just a blank screen no matter what buttons we press. We are depressed by this- have fiddled for hours, so any advice would be great.

Posts: 9

Participants: 3

Read full topic

Micro Arcade... prototype?

$
0
0

@senebi9402 wrote:

Have you noticed that there’s an image floating around of a possible Pac Man Micro Arcade prototype? Found this on GameStop…

It looks like the prototype was based more heavily on the Tetris MicroCard’s design. Was this version ever released? Or was it a mockup / internal prototype only?

Posts: 1

Participants: 1

Read full topic

Arduboy uploader for Mac?

The Social Distance Game

$
0
0

@msanatan wrote:

thesocialdistancegame.hex (34.7 KB)

Get more points by keeping your distance from pedestrians and make your community proud. Ultimately, you should really be at home so at some point you’ll lose lol.

After playing a few games and following the pong tutorial, I decided to make this mini-game to figure out my development flow and rekindle my long-forgotten C++ dance moves (so many things have changed…).

Feel free to check out my humble source code

Controls

D-PAD - Movement
A/B - Pause

Hope everyone is safe throughout this pandemic!

Posts: 1

Participants: 1

Read full topic


Code isn't uploading properly to my Arduboy

$
0
0

@Revlis wrote:

Hello, all! I need help with my code or the IDE possibly. Whenever I verify or compile the code, the Arduino IDE doesn’t present me with any errors, yet when I upload it to my Arduboy, it would either display nothing or it would display the last image the Arduboy was on before compiling, when it should illustrate the 2-D Array. Any help would be much appreciated!

Edit: It also gave me a usb malfunction message, so proceed with caution if you’re considering compiling this code to your Arduboy, as it might be tricky to reflash it afterwards.

#include <Arduboy2.h>
#include <EEPROM.h>
Arduboy2 arduboy;
BeepPin1 beep;

const uint8_t levels[8][12]
{ 
  //Lv1
  {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
  
};

uint8_t block[8][12];
uint8_t GameState;

struct Construct
{
  void levelCreate()
  {
    
    uint8_t a;
    
    for(uint8_t e; a<=8; ++e)
    {
      
      block[a][e]=levels[a][e];
      
      if(e == 12 && a != 8)
      {
      
        e=0;
        a+=1;
      
      }
      
    }
    
  }
  
};


struct Illustrate 
{
  
  void levelVisuals()
  {
    
    arduboy.fillRect(0, 0, 96, 64, WHITE);
    uint8_t a;
    for(uint8_t e; a<=8; ++e)
    
    {
      
      switch(block[a][e])
      {
        
        case 1:
        
          arduboy.fillRect((e*8), (a*8), 8, 8, BLACK);
          
        break;
      
      }
      
      if(e == 12 && a != 8)
      {
        
        e=0;
        a+=1;
        
      }
      
    }
    
  }
  
};

Construct construct;
Illustrate illustrate;

void setup()
{
  
  arduboy.boot();
  arduboy.systemButtons();
  arduboy.audio.begin();
  beep.begin();
  arduboy.safeMode();
  arduboy.setFrameRate(32);
  
}

void gameloop()
{
  
  switch(GameState)
  {
    
  case 0:
  
    construct.levelCreate();
    illustrate.levelVisuals();
    
  break;

  }
  
}

void loop()
{
  
  arduboy.clear();
  gameloop();
  arduboy.display();
  
}

Posts: 14

Participants: 5

Read full topic

Scrolling Arduboy Screen

$
0
0

@mhut wrote:

I haven’t used my arduboy in quite a while. This morning I went to go upload a new game and got a scrolling screen when I uploaded a new game. Could someone give me step by step instructions on how to fix this? On a Mac computer. Thank you

Update: New problem- I tried tinkering around and I bricked it… I tried following the video instructions and nothing happened. not sure what to do now… I do however have the red charging lights and the other two flash. No flashlight mode either.

Posts: 3

Participants: 3

Read full topic

Menus - but not for Arduboy

$
0
0

@SimonMerrett wrote:

I’m trying to get better at coding menus, as it seems like a pretty useful thing to be better at in general. To start with, I’ve read around the web about state machines, lookup tables vs switch case and nothing makes as much sense as the advice that gets offered on this forum.

My application is a temperature sensing device which has only two buttons for input (space constraints) and an oled for an output (not a SH1107 and not on my own PCB!). Ideally it’d use a small microcontroller, think ATtiny, so compiled code size is important to keep small. Speed is not important at all. Readings will be around 1Hz and the menu only needs to avoid annoying levels of lag so refresh rate can be 10Hz or perhaps even slower.

The main display modes are 1) digital readout of the current temperature or 2) a graph of a rolling window of readings or, 3) an optional countdown to an estimated time when a cooling body will reach a target temperature. There are also visual alarms when a reading is over or under an upper or lower limit, set by the user. I need a menu to set all this and so far this is what I have come up with:


I thought that incrementing individual digits of the 3 digit numbers was a faster way to set the target temperatures than incrementing a single number by 0.1 degree, and the code to do this, convert the values into a single float could be reused by three submenus.

I have seen the likes of @Pharap encourage enum classes in the context of menus before and my general impression is that C++ leads to less code than C to implement a menu but has anyone got any tips, tutorials, tricks or great examples of how to go about making a very lightweight menu system? I’m inclined to trust the compiler to optimise but I don’t want to ask it to do anything unnecessary (and most of the other menu libraries I’ve scanned, such as for LCD character displays, are a bit bloated for what I think I need).

I published my schematic not so someone might “do my homework” but it will hopefully give you a steer on the degree of complexity I’m aiming for. I realise it’s not showing the alarm state and doesn’t show the menu items being incremented by button2 but hopefully its enough to help you help me!

Thanks

Posts: 14

Participants: 3

Read full topic

Inspired by Bubble Bobble

$
0
0

@Bomg9409 wrote:

This is my first article and I would like to share this demo with expectation of any support and comment to improve.
I made this demo based on this community’s lessons category.
please visit “(https://github.com/bongchul/bob14)” and give your advice as below issue.

I need change map process code(memcpy) if player got 100 point and 200 point …

From South Korea.

Posts: 5

Participants: 3

Read full topic

C++ Pointers

$
0
0

@jackdaly wrote:

I’m going through some code that uses pointers to distribute objects into a function - a snippet of the code (example) is as follows:

display.draw(&controller) // Controller being a class

which links to the below function:

void Display::draw(Ball *ball)
{
  drawObject(1, ball->position);
}

I have a brief understanding of what pointers are, however, I’m failing to understand why they are used in this context? Why would we use pointers?


My current understanding is for space, as passing the address of the controller and then getting the value of the address of controller in the function would be the same as just passing controller (my understanding), why wouldn’t we just pass the class through and therefore access the position through controller.position.Would passing the class through be “too heavy” on memory?

Another idea I had was: as when we call the function display.draw() we don’t only pass through the class controller but other classes like &breakout.ball which also have a position that would need to be accessed and drew. Therefore allowing us to access the positions as doing controller.position would be hardcoded and wouldn’t allow us to change the class of [class].position - whereas if we do it with pointers we can say [pointer]->position and therefore point to the address of whatever class we want to access - therefore making it efficient and a good algorithm. Would my interpretation be correct?

I can supply the code if asked, please advise.

Thank you in advanced.

  • Jack

Posts: 3

Participants: 3

Read full topic

Viewing all 3333 articles
Browse latest View live