void checkKeys() { if(IsKeyDown(KEY_CTRL_EXIT) || IsKeyDown(KEY_CTRL_MENU)) { SerialTransmit(EXIT); Stop_SerialPort(); Reset_Calc(); } if((IsKeyDown(KEY_CTRL_UP) || IsKeyDown(KEY_CHAR_5) || IsKeyDown(KEY_CHAR_8)) && direction != 2) { direction = 0; } if((IsKeyDown(KEY_CTRL_RIGHT) || IsKeyDown(KEY_CHAR_3) || IsKeyDown(KEY_CHAR_6)) && direction != 3) { direction = 1; } if((IsKeyDown(KEY_CTRL_DOWN) || IsKeyDown(KEY_CHAR_2)) && direction != 0) { direction = 2; } if((IsKeyDown(KEY_CTRL_LEFT) || IsKeyDown(KEY_CHAR_1) || IsKeyDown(KEY_CHAR_4)) && direction != 1) { direction = 3; } }
int AddIn_main(int isAppli, unsigned short OptionNum) { int collided = 0; unsigned char answer; Bdisp_AllClr_DDVRAM(); Init_SerialPort(); Start_SerialPort(); if(connect() == 0) { isHost = 1; } while(1) { startScreen(); memset(videoBuffer, 0, 1024); DrawBox(0, 0, 127, 63, videoBuffer, BLACK); DrawBox(48, 27, 79, 37, videoBuffer, BLACK); CoolText(51, 29, FONT_FIVE, "Ready?", videoBuffer); DrawAll(videoBuffer); Sleep(1000); SerialTransmit(READY); while(SerialReceive() != READY) { ; } reset(); while(1) { answer = SerialReceive(); if(answer == CRASH) { score++; wonLast = ME; break; } if(answer == EXIT) { Reset_Calc(); } if(answer == COORDS) { receivedX = SerialReceive(); receivedY = SerialReceive(); setBit(videoBuffer, 128, receivedX, receivedY, 1); } checkKeys(); move(); collided = getBit(videoBuffer, 128, playerX, playerY); if(collided) { otherScore++; wonLast = OTHER; SerialTransmit(CRASH); break; } setBit(videoBuffer, 128, playerX, playerY, 1); SerialTransmit(COORDS); SerialTransmit(playerX); SerialTransmit(playerY); DrawAll(videoBuffer); Sleep(delays[speed]); } } return 1; }
void startScreen() { unsigned char answer; char scoreText[4], otherScoreText[4], statusText[22], speedText[22], levelText[22]; int isReady = 0, is1Pressed = 0, is2Pressed = 0, is3Pressed = 0, isLeftPressed = 0, isRightPressed = 0; while(!isReady) { if(isHost) { if(isConnected) { strcpy(statusText, "Hosting"); } else { strcpy(statusText, "Waiting"); } } else { strcpy(statusText, "Connected"); } sprintf(scoreText, "%d", score); sprintf(otherScoreText, "%d", otherScore); sprintf(speedText, "SPEED: %d", speed + 1); sprintf(levelText, "LEVEL: %d", level + 1); memset(videoBuffer, 0, 1024); DrawBox(0, 0, 127, 63, videoBuffer, BLACK); DrawLine(0, 8, 127, 8, videoBuffer, BLACK); DrawLine(0, 16, 127, 16, videoBuffer, BLACK); DrawLine(0, 24, 127, 24, videoBuffer, BLACK); DrawLine(64, 16, 64, 24, videoBuffer, BLACK); DrawLine(0, 32, 127, 32, videoBuffer, BLACK); DrawLine(0, 40, 127, 40, videoBuffer, BLACK); CoolText(32, 1, FONT_FIVE, "MTRON by rojet601", videoBuffer); CoolText(48, 9, FONT_FIVE, statusText, videoBuffer); CoolText(27, 17, FONT_FIVE, scoreText, videoBuffer); CoolText(91, 17, FONT_FIVE, otherScoreText, videoBuffer); if(wonLast == ME) { CoolText(48, 25, FONT_FIVE, "You won", videoBuffer); } if(wonLast == OTHER) { CoolText(48, 25, FONT_FIVE, "You lost", videoBuffer); } if(isHost) { CoolText(2, 33, FONT_FIVE, speedText, videoBuffer); CoolText(65, 33, FONT_FIVE, levelText, videoBuffer); CoolText(2, 52, FONT_FIVE, "[1]-[3] SPEED", videoBuffer); CoolText(65, 52, FONT_FIVE, " LEVEL", videoBuffer); DrawLine(65, 55, 71, 55, videoBuffer, BLACK); DrawLine(66, 55, 68, 53, videoBuffer, BLACK); DrawLine(66, 55, 68, 57, videoBuffer, BLACK); DrawLine(73, 55, 79, 55, videoBuffer, BLACK); DrawLine(79, 55, 77, 53, videoBuffer, BLACK); DrawLine(79, 55, 77, 57, videoBuffer, BLACK); if(isConnected) { CoolText(2, 43, FONT_FIVE, "[SHIFT] START", videoBuffer); } } else { CoolText(2, 43, FONT_FIVE, "Only the host can change", videoBuffer); CoolText(2, 52, FONT_FIVE, "the settings", videoBuffer); } DrawAll(videoBuffer); if(IsKeyDown(KEY_CTRL_EXIT) || IsKeyDown(KEY_CTRL_MENU)) { SerialTransmit(EXIT); Stop_SerialPort(); Reset_Calc(); } answer = SerialReceive(); if(answer == EXIT) { Stop_SerialPort(); Reset_Calc(); } if(answer == START) { Sleep(50); speed = SerialReceive(); level = SerialReceive(); isReady = 1; } if(isHost) { if(!isConnected) { if(answer == HELLO_HOST) { SerialTransmit(HELLO_CLIENT); isConnected = 1; } } else { if(IsKeyDown(KEY_CTRL_SHIFT)) { SerialTransmit(START); SerialTransmit(speed); SerialTransmit(level); Sleep(50); isReady = 1; } } if(!IsKeyDown(KEY_CHAR_1)) { is1Pressed = 0; } if(IsKeyDown(KEY_CHAR_1) && !is1Pressed) { is1Pressed = 1; speed = 0; } if(!IsKeyDown(KEY_CHAR_2)) { is2Pressed = 0; } if(IsKeyDown(KEY_CHAR_2) && !is2Pressed) { is2Pressed = 1; speed = 1; } if(!IsKeyDown(KEY_CHAR_3)) { is3Pressed = 0; } if(IsKeyDown(KEY_CHAR_3) && !is3Pressed) { is3Pressed = 1; speed = 2; } if(!IsKeyDown(KEY_CTRL_LEFT)) { isLeftPressed = 0; } if(IsKeyDown(KEY_CTRL_LEFT) && !isLeftPressed) { isLeftPressed = 1; level--; if(level == 255) { level = levels - 1; } } if(!IsKeyDown(KEY_CTRL_RIGHT)) { isRightPressed = 0; } if(IsKeyDown(KEY_CTRL_RIGHT) && !isRightPressed) { isRightPressed = 1; level++; if(level > levels - 1) { level = 0; } } } } }
int AddIn_main(int isAppli, unsigned short OptionNum) { int xMap, yMap, newXMap, newYMap; unsigned char *light_buffer, *dark_buffer, *light_swap, *dark_swap, *tmp_swap; Map mapTest; //On initialise les buffer par calloc (plus propre que par allocation automatique!) : light_buffer = calloc(1024, sizeof(unsigned char)); dark_buffer = calloc(1024, sizeof(unsigned char)); //Les deux buffers ci-dessous sont les "sawp" qui permettent de faire du double buffering // afin d'obtenir une meilleure fluiditée. light_swap = calloc(1024, sizeof(unsigned char)); dark_swap = calloc(1024, sizeof(unsigned char)); tmp_swap = 0; Bdisp_AllClr_DDVRAM(); Change_Contrast (166); //On initialise le grayscale de revolution-fx : GrayLinkBuffers(light_buffer, dark_buffer); GrayInit(6987, 3269); //Allocation de la map : mapTest = aMap(m_votre_map); //Boucle principale d'execution : while(IsKeyUp (KEY_CTRL_EXIT)){ if (IsKeyDown (KEY_CTRL_LEFT)) xMap-=2; if (IsKeyDown (KEY_CTRL_RIGHT)) xMap+=2; if (IsKeyDown (KEY_CTRL_UP)) yMap-=2; if (IsKeyDown (KEY_CTRL_DOWN)) yMap+=2; //On vérifie si on ne sort pas de la map : if (xMap<0) xMap=0; else if (xMap > (mapTest.width-128/mapTest.tileset.tileWidth)*mapTest.tileset.tileWidth) xMap = (mapTest.width-128/mapTest.tileset.tileWidth)*mapTest.tileset.tileWidth; if (yMap<0) yMap=0; else if (yMap > (mapTest.height-64/mapTest.tileset.tileHeight)*mapTest.tileset.tileHeight) yMap = (mapTest.height-64/mapTest.tileset.tileHeight)*mapTest.tileset.tileHeight; //On dessine la map sur les buffer de swap : drawMap (mapTest, xMap/mapTest.tileset.tileWidth, yMap/mapTest.tileset.tileHeight, 128/mapTest.tileset.tileWidth +1, 64/mapTest.tileset.tileWidth +1, -(xMap % mapTest.tileset.tileWidth), -(yMap % mapTest.tileset.tileHeight), light_swap, dark_swap); //On inverse les buffer de swap avec les buffer principaux : GrayLinkBuffers(light_swap, dark_swap); tmp_swap = light_swap; light_swap = light_buffer; light_buffer = tmp_swap; tmp_swap = dark_swap; dark_swap = dark_buffer; dark_buffer = tmp_swap; //On efface les nouveaux buffer de swap : memset(light_swap, 0, 1024); memset(dark_swap, 0, 1024); } CPUSpeedNormal(); Reset_Calc(); return 1; }