Help find the classes, how they are utilized and how many objects were created in this code provided by me Source is provided, mainmenu.cpp is the images. and mainmenu.h is also provided. Source.cpp #include #include "MainMenu.h" #include #include using namespace sf; int N = 30, M = 20; int size = 16; int w = size * N; int h = size * M; int dir, num = 4; struct Snake { int x, y; } s[100]; struct Fruit { int x, y; } f; void Tick() { for (int i = num;i > 0;--i) { s[i].x = s[i - 1].x; s[i].y = s[i - 1].y; } if (dir == 0) s[0].y += 1; if (dir == 1) s[0].x -= 1; if (dir == 2) s[0].x += 1; if (dir == 3) s[0].y -= 1; if ((s[0].x == f.x) && (s[0].y == f.y)) { num++; f.x = rand() % N; f.y = rand() % M; } if (s[0].x > N) s[0].x = 0; if (s[0].x < 0) s[0].x = N; if (s[0].y > M) s[0].y = 0; if (s[0].y < 0) s[0].y = M; for (int i = 1;i < num;i++) if (s[0].x == s[i].x && s[0].y == s[i].y) num = i; } int main() { sf::RenderWindow window(sf::VideoMode(1080, 720), "Snake"); MainMenu mainmenu(1080, 720); Texture textureBackground; textureBackground.loadFromFile("Snakebgs.png"); sf::Sprite spriteBackground; spriteBackground.setTexture(textureBackground); spriteBackground.setPosition(0, 0); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); if (event.type == sf::Event::KeyReleased) { if (event.key.code == sf::Keyboard::Up) { mainmenu.moveUp(); break; } if (event.key.code == sf::Keyboard::Down) { mainmenu.moveDown(); break; } if (event.key.code == sf::Keyboard::Return) { int x = mainmenu.mainMenuPressed(); if (x == 1) return 0; if (x == 0) printf("Play Button was pressed\n"); srand(time(0)); sf::RenderWindow window(sf::VideoMode(w, h), "Snake"); Texture t1, t2, t3; t1.loadFromFile("images/snakebg.png"); t2.loadFromFile("images/red.png"); t3.loadFromFile("images/green.png"); Sprite sprite1(t1); Sprite sprite2(t2); Sprite sprite3(t3); Clock clock; float timer = 0, delay = 0.1; f.x = 10; f.y = 10; while (window.isOpen()) { float time = clock.getElapsedTime().asSeconds(); clock.restart(); timer += time; Event e; while (window.pollEvent(e)) { if (e.type == Event::Closed) window.close(); } if (Keyboard::isKeyPressed(Keyboard::Left)) dir = 1; if (Keyboard::isKeyPressed(Keyboard::Right)) dir = 2; if (Keyboard::isKeyPressed(Keyboard::Up)) dir = 3; if (Keyboard::isKeyPressed(Keyboard::Down)) dir = 0; if (timer > delay) { timer = 0; Tick(); } window.clear(); for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) { sprite1.setPosition(i * size, j * size); window.draw(sprite1); } for (int i = 0;i < num;i++) { sprite3.setPosition(s[i].x * size, s[i].y * size); window.draw(sprite3); } sprite2.setPosition(f.x * size, f.y * size); window.draw(sprite2); window.display(); } } } } window.clear(); window.draw(spriteBackground); mainmenu.Draw(window); window.display(); } } Main Menu.h #pragma once #include "SFML/Graphics.hpp" #include #define Max_main_menu 3 class MainMenu { sf::Texture* image; sf::Sprite* bg; public: MainMenu(float width, float height); void Draw(sf::RenderWindow& window); void moveUp(); void moveDown(); int mainMenuPressed() { return mainMenuSelected; } ~MainMenu(); private: int mainMenuSelected; sf::Font font; sf::Text mainMenu[Max_main_menu]; };
Help find the classes, how they are utilized and how many objects were created in this code provided by me
Source is provided, mainmenu.cpp is the images. and mainmenu.h is also provided.
Source.cpp
#include <SFML/Graphics.hpp>
#include "MainMenu.h"
#include <time.h>
#include <SFML/Window.hpp>
using namespace sf;
int N = 30, M = 20;
int size = 16;
int w = size * N;
int h = size * M;
int dir, num = 4;
struct Snake
{
int x, y;
} s[100];
struct Fruit
{
int x, y;
} f;
void Tick()
{
for (int i = num;i > 0;--i)
{
s[i].x = s[i - 1].x; s[i].y = s[i - 1].y;
}
if (dir == 0) s[0].y += 1;
if (dir == 1) s[0].x -= 1;
if (dir == 2) s[0].x += 1;
if (dir == 3) s[0].y -= 1;
if ((s[0].x == f.x) && (s[0].y == f.y))
{
num++; f.x = rand() % N; f.y = rand() % M;
}
if (s[0].x > N) s[0].x = 0; if (s[0].x < 0) s[0].x = N;
if (s[0].y > M) s[0].y = 0; if (s[0].y < 0) s[0].y = M;
for (int i = 1;i < num;i++)
if (s[0].x == s[i].x && s[0].y == s[i].y) num = i;
}
int main()
{
sf::RenderWindow window(sf::VideoMode(1080, 720), "Snake");
MainMenu mainmenu(1080, 720);
Texture textureBackground;
textureBackground.loadFromFile("Snakebgs.png");
sf::Sprite spriteBackground;
spriteBackground.setTexture(textureBackground);
spriteBackground.setPosition(0, 0);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
if (event.type == sf::Event::KeyReleased)
{
if (event.key.code == sf::Keyboard::Up)
{
mainmenu.moveUp();
break;
}
if (event.key.code == sf::Keyboard::Down)
{
mainmenu.moveDown();
break;
}
if (event.key.code == sf::Keyboard::Return)
{
int x = mainmenu.mainMenuPressed();
if (x == 1)
return 0;
if (x == 0)
printf("Play Button was pressed\n");
srand(time(0));
sf::RenderWindow window(sf::VideoMode(w, h), "Snake");
Texture t1, t2, t3;
t1.loadFromFile("images/snakebg.png");
t2.loadFromFile("images/red.png");
t3.loadFromFile("images/green.png");
Sprite sprite1(t1);
Sprite sprite2(t2);
Sprite sprite3(t3);
Clock clock;
float timer = 0, delay = 0.1;
f.x = 10;
f.y = 10;
while (window.isOpen())
{
float time = clock.getElapsedTime().asSeconds();
clock.restart();
timer += time;
Event e;
while (window.pollEvent(e))
{
if (e.type == Event::Closed)
window.close();
}
if (Keyboard::isKeyPressed(Keyboard::Left)) dir = 1;
if (Keyboard::isKeyPressed(Keyboard::Right)) dir = 2;
if (Keyboard::isKeyPressed(Keyboard::Up)) dir = 3;
if (Keyboard::isKeyPressed(Keyboard::Down)) dir = 0;
if (timer > delay) { timer = 0; Tick(); }
window.clear();
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
{
sprite1.setPosition(i * size, j * size); window.draw(sprite1);
}
for (int i = 0;i < num;i++)
{
sprite3.setPosition(s[i].x * size, s[i].y * size); window.draw(sprite3);
}
sprite2.setPosition(f.x * size, f.y * size); window.draw(sprite2);
window.display();
}
}
}
}
window.clear();
window.draw(spriteBackground);
mainmenu.Draw(window);
window.display();
}
}
Main Menu.h
#pragma once
#include "SFML/Graphics.hpp"
#include <iostream>
#define Max_main_menu 3
class MainMenu
{
sf::Texture* image;
sf::Sprite* bg;
public:
MainMenu(float width, float height);
void Draw(sf::RenderWindow& window);
void moveUp();
void moveDown();
int mainMenuPressed()
{
return mainMenuSelected;
}
~MainMenu();
private:
int mainMenuSelected;
sf::Font font;
sf::Text mainMenu[Max_main_menu];
};
Step by step
Solved in 2 steps