Welcome, Guest. Please login or register. Did you miss your activation email?

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Pops

Pages: [1]
1
Hi, I'm new to VS/SFML/C++, haven't done any serious programming since the early 2000's, now just a hobby when I get time. I'm trying to write a "pixel fight", something like but on a map with land and sea. I'm getting the message in the title despite not having a "<" operator in my code. I've looked for a solution online, this seems to be a common error, but I can't find in my code where I have gone wrong. I'm using:

sfml 2.6.1
vs   2022 17.8.3
c++  Visual C++ 2022

If I copy/paste the error message from VS I get a bit more information:

Severity   Code   Description   Project   File   Line   Suppression State   Details
Error   C2678   binary '<': no operator found which takes a left-hand operand of type 'const _Ty' (or there is no acceptable conversion)
        with
        [
            _Ty=sf::Color
        ]   sfmlWindow   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\type_traits   2441

So it looks like I'm doing something wrong when processing pixel colours. I'm hoping someone can point me to where I am going wrong, or if I am diving in too fast, what I need to know to fix this.

Code is:
//#include <iostream>          // cin, cout
#include <set>               // std::set
#include <SFML/Graphics.hpp> //sfml

using namespace std;         // cin, cout

int main()
{
    int const screenwidth  = 1915;
    int const screenheight = 975;
   
    sf::RenderWindow window(sf::VideoMode(screenwidth, screenheight), "TheWarGames");
    sf::Sprite map;
    sf::Texture territory;
   
    if (!territory.loadFromFile("C:\\jgstuff\\Systems\\TheWarGames\\Catalhoyukmap.png"))
        return -1;
    map.setTexture(territory);
    //#########################################################################################
    int random_pixel(int);
    int ct0, ct1, ct2, w, h, wm1, hm1, wp1, hp1, land_ct, enemy_ct, pixel_out;
    const sf::Color green = sf::Color(0x00ff00ff); //  green opaque
    const sf::Color blue = sf::Color(0x0000ffff); //  blue opaque
    const sf::Color red = sf::Color(0xff0000ff); //  red opaque
    const sf::Color black = sf::Color(0x000000ff); //  black opaque
    sf::Color tempcol;
    sf::Color center_pixel_col;
    sf::Color surr_pixels[9];
    const std::set<sf::Color>landorsea={ green, blue };
    const std::set<sf::Color>noncombatant={ green, blue, black};
    const int wto = screenwidth - 1;
    const int hto = screenheight - 1;
    //#########################################################################################

    while (window.isOpen())
    {
       sf::Event event;
       while (window.pollEvent(event))
       {
           if (event.type == sf::Event::Closed)
               window.close();
       }
// Stuff Start
       sf::Image image = territory.copyToImage();
       //int x = rand() % 500;
       //int y = rand() % 500;
       //for (int i = x; i < x+500; i++)
       //{
       //   for (int j = y; j < y+250; j++)
       //   {
       //       image.setPixel(i, j, sf::Color::Black);
       //   }
       //}
       territory.loadFromImage(image);
 //#########################################################################################
// map surrounded by black pixels
// map pointed to by image
//       #### need two images / textures ####
       for (w = 1; w <= wto; w++)
       {
           for (h = 1; h <= hto; h++)
           {
               center_pixel_col = image.getPixel(w, h);
               if (landorsea.find(center_pixel_col) == landorsea.end() &&
                   center_pixel_col.a == 255) // i.e. is fully opaque
               {
                   wm1 = w - 1;
                   hm1 = h - 1;
                   wp1 = w + 1;
                   hp1 = h + 1;
                   ct0 = 0;
                   for (ct1 = wm1; ct1 <= wp1; ct1++)
                   {
                       for (ct2 = hm1; ct2 <= hp1; ct2++)
                       {
                           surr_pixels[ct0] = image.getPixel(ct1, ct2);
                           ct0 += 1;
                       }
                   }
                   land_ct = enemy_ct = 0;
                   for (ct0 = 0; ct0 <= 8; ct0++) // implies 9 pixels pixel in hand and neighbours
                   {
                       if (ct0 != 4)
                       {
                           tempcol = surr_pixels[ct0];
                           if (tempcol == green) // ####################################### HERE ######################
                           {
                               land_ct += 1;
                           }
                           else if (noncombatant.find(tempcol) == noncombatant.end())
                           {
                               enemy_ct += 1;
                           }
                       }
                   }
                   if (land_ct > 0)
                   {
                       pixel_out = random_pixel(land_ct);
                       if (pixel_out != 4)
                       {
                           ct0 = ct1 = 0;
                           while (ct0 <= pixel_out)
                           {
                               if (surr_pixels[ct1] == green &&
                                   ct1 != 4)
                               {
                                   ct0++; // land count
                               }
                               ct1++; // array count
                           }
                           ct1 = random_pixel(2);
                           if (ct1 == 1)
                           {
                               center_pixel_col.a = 254;
                               image.setPixel(wm1 + (ct0 / 3), hm1 + (ct0 % 3), center_pixel_col);
                           }
                           else
                           {
                               tempcol = image.getPixel(wm1 + (ct0 / 3), hm1 + (ct0 % 3));
                               tempcol.a = 254;
                               image.setPixel(w, h, tempcol);
                           }
                       }
                   }
                   else if (enemy_ct > 0)             //enemies not set up yet
                   {
                       pixel_out = random_pixel(enemy_ct);
                       if (pixel_out != 4)
                       {
                           ct0 = ct1 = 0;
                           while (ct0 <= pixel_out)
                           {
                              if (noncombatant.find(center_pixel_col) == noncombatant.end() &&
                                  ct1 != 4)
                              {
                                   ct0++; // enemy count
                              }
                               ct1++; // array count
                           }
                           ct1 = random_pixel(2);
                           if (ct1 == 1)
                           {
                               center_pixel_col.a = 254;
                               image.setPixel(wm1 + (ct0 / 3), hm1 + (ct0 % 3), center_pixel_col);
                           }
                           else
                           {
                               tempcol = image.getPixel(wm1 + (ct0 / 3), hm1 + (ct0 % 3));
                               tempcol.a = 254;
                               image.setPixel(w, h, tempcol);
                           }
                       }
                   }
               }
           }
       }
       //reset changed flags

 //#########################################################################################
       // Stuff End

       window.clear();
       window.draw(map);
       window.display();
    }

    return 0;
}

int random_pixel(int pixel_ct)
{
   srand((unsigned)time(NULL));
   return((rand() % pixel_ct));
}
 

Pages: [1]