Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <SDL2/SDL.h>
- #include <stdlib.h>
- #include <time.h>
- int energy = 16;
- const int UPDATE_RATE = 0;
- const int SCREEN_WIDTH = 1024;
- const int SCREEN_HEIGHT = 1024;
- const int GRID_SIZE = 4; // Size of each grid cell
- const int GRID_ROWS = SCREEN_HEIGHT / GRID_SIZE;
- const int GRID_COLS = SCREEN_WIDTH / GRID_SIZE;
- int antPos[2] = {GRID_ROWS/2,GRID_COLS/2};
- int antCol[3] = {64,64,255};
- int gridCell[GRID_ROWS][GRID_COLS];
- int antDir=0;
- void renderWholeGrid(SDL_Renderer* renderer) {
- // Clear the renderer
- SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
- // Set a different color for each cell
- for (int i = 0; i < GRID_ROWS; ++i) {
- for (int j = 0; j < GRID_COLS; ++j) {
- int red = gridCell[i][j]*32;
- int green = gridCell[i][j]*32;
- int blue = gridCell[i][j]*32;
- SDL_SetRenderDrawColor(renderer, red, green, blue, 255);
- SDL_Rect cell = {j * GRID_SIZE, i * GRID_SIZE, GRID_SIZE, GRID_SIZE};
- SDL_RenderFillRect(renderer, &cell);
- }
- }
- SDL_SetRenderDrawColor(renderer, antCol[0], antCol[1], antCol[2], 255);
- SDL_Rect antCell = {antPos[0] * GRID_SIZE, antPos[1] * GRID_SIZE, GRID_SIZE, GRID_SIZE};
- SDL_RenderFillRect(renderer, &antCell);
- // Present the renderer
- SDL_RenderPresent(renderer);
- }
- void updateAnt(SDL_Renderer* renderer){
- //draw ant old position
- int red = gridCell[antPos[1]][antPos[0]]*32;
- int green = gridCell[antPos[1]][antPos[0]]*32;
- int blue = gridCell[antPos[1]][antPos[0]]*32;
- SDL_SetRenderDrawColor(renderer, red, green, blue, 255);
- SDL_Rect cell = {antPos[0] * GRID_SIZE, antPos[1] * GRID_SIZE, GRID_SIZE, GRID_SIZE};
- SDL_RenderFillRect(renderer, &cell);
- //move ant
- if(gridCell[antPos[1]][antPos[0]]){
- antDir+=1;
- }else{
- antDir-=1;
- }
- antDir=(antDir+4)%4;
- int deltay[] = {0,1,0,-1};
- int deltax[] = {-1,0,1,0};
- antPos[0]+=deltax[antDir];
- antPos[1]+=deltay[antDir];
- antPos[0] = (antPos[0] + GRID_ROWS) % GRID_ROWS;
- antPos[1] = (antPos[1] + GRID_COLS) % GRID_COLS;
- //update cell
- gridCell[antPos[1]][antPos[0]]=!gridCell[antPos[1]][antPos[0]];
- //draw ant
- SDL_SetRenderDrawColor(renderer, antCol[0], antCol[1], antCol[2], 255);
- SDL_Rect antCell = {antPos[0] * GRID_SIZE, antPos[1] * GRID_SIZE, GRID_SIZE, GRID_SIZE};
- SDL_RenderFillRect(renderer, &antCell);
- // Present the renderer
- SDL_RenderPresent(renderer);
- printf("x: %d ",antPos[0]);
- printf("y: %d ",antPos[1]);
- printf("%d\n",gridCell[antPos[0]][antPos[1]]);
- }
- int main() {
- srand(time(NULL));
- for (int i = 0; i < GRID_ROWS; ++i) {
- for (int j = 0; j < GRID_COLS; ++j) {
- gridCell[i][j] = ((i+4) / 8 + (j+3) / 8) % 2;
- }
- }
- // Initialize SDL
- if (SDL_Init(SDL_INIT_VIDEO) < 0) {
- std::cerr << "SDL could not initialize! SDL_Error: " << SDL_GetError() << std::endl;
- return 1;
- }
- // Create a window
- SDL_Window* window = SDL_CreateWindow("Grid Renderer", 3400, 600, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
- if (window == nullptr) {
- std::cerr << "Window could not be created! SDL_Error: " << SDL_GetError() << std::endl;
- return 2;
- }
- // Create a renderer for the window
- SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
- if (renderer == nullptr) {
- std::cerr << "Renderer could not be created! SDL_Error: " << SDL_GetError() << std::endl;
- return 3;
- }
- bool quit = false;
- SDL_Event e;
- renderWholeGrid(renderer);
- Uint32 startTime = SDL_GetTicks();
- startTime+=UPDATE_RATE;
- int updateWholeRate=1000; //update whole screen per x frames
- int frameNum=0;
- while (!quit) {
- frameNum++;
- if(frameNum>updateWholeRate){
- frameNum=0;
- renderWholeGrid(renderer);
- }
- while (SDL_PollEvent(&e) != 0) {
- if (e.type == SDL_QUIT) {
- quit = true;
- }
- if (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE) {
- quit = true;
- }
- }
- // Calculate the time to render a frame
- Uint32 frameTime = SDL_GetTicks() - startTime;
- // Wait for the remainder of the 1-second frame
- if (frameTime < UPDATE_RATE) {
- SDL_Delay(UPDATE_RATE - frameTime);
- }
- startTime = SDL_GetTicks();
- updateAnt(renderer);
- }
- // Clean up and exit
- SDL_DestroyRenderer(renderer);
- SDL_DestroyWindow(window);
- SDL_Quit();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement