<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Game Code SchoolGame Code School -  &#187; BLOG</title>
	<atom:link href="https://gamecodeschool.com/category/blog/feed/" rel="self" type="application/rss+xml" />
	<link>https://gamecodeschool.com</link>
	<description>Game Coding for Beginners</description>
	<lastBuildDate>Wed, 29 Jan 2025 11:28:15 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>Web3 Gaming</title>
		<link>https://gamecodeschool.com/blog/web3-gaming/</link>
		<comments>https://gamecodeschool.com/blog/web3-gaming/#comments</comments>
		<pubDate>Sat, 27 May 2023 15:01:55 +0000</pubDate>
		<dc:creator><![CDATA[John Horton]]></dc:creator>
				<category><![CDATA[BLOG]]></category>

		<guid isPermaLink="false">https://gamecodeschool.com/?p=16725</guid>
		<description><![CDATA[Web3 gaming is a new type of gaming that uses blockchain technology to create a more immersive and rewarding experience for players. In web3 games, players own their in-game assets, which can be traded or used in other games. This creates a more open and transparent gaming ecosystem, where players have more control over their [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Web3 gaming is a new type of gaming that uses blockchain technology to create a more immersive and rewarding experience for players. In web3 games, players own their in-game assets, which can be traded or used in other games. This creates a more open and transparent gaming ecosystem, where players have more control over their gaming experience.</p>
<h2>What is cool about Web3 Gaming and why am I writing about it on a coding website?</h2>
<p>There are many things that are cool about web3 gaming. Here are a few of the most notable:</p>
<p>Ownership: In web3 games, players own their in-game assets. This means that they can trade or sell them to other players, or use them in other games. This gives players more control over their gaming experience and allows them to earn money from playing games. If you have ever wondered about the game world and got a thrill from collecting all the gold, money, crafting resources, etc. then Web3 games multiply this adrenalin hit 100 fold.</p>
<p>Transparency: Web3 games are built on blockchain technology, which is a transparent and secure ledger. This means that all transactions in web3 games are public and can be verified by anyone. This gives players peace of mind knowing that their in-game assets are safe and secure. Want to trade, swap, or give away that new shield or cool outfit, you can.</p>
<p>Interoperability: Web3 games are designed to be interoperable, which means that in-game assets can be used in other games. This creates a more open and connected gaming ecosystem where players can take their assets with them wherever they go.</p>
<p>But actually, there is an even bigger, more urgent reason than any of these and it is less to do with gaming specifically and more to do with society, culture, and, unfortunately, global politics. I won&#8217;t bother you with it until the end of the article.</p>
<h2>The problem with Web3 gaming</h2>
<p>Actually, there are quite a few. First, there is not a single game that fully realizes the vision I outlined above. Second, the games which are closest to the vision like some of the <a href="https://games.gala.com/">Gala Games</a> titles, <a href="https://illuvium.io/">Illuvium</a>, or The Sandbox are all, without exception, overpriced. My best prediction for a web3 game that can go mainstream and please everybody &#8211; but still isn&#8217;t done yet &#8211; is <a href="https://cinema.gameoffthegrid.com">Off the Grid </a>from Gunzilla.</p>
<p>Third, I think Web3 is a stupid name. Web3 doesn&#8217;t just refer to games, it refers to the wider crypto economy. As, currently, most of the applications of this economy are interacted with through websites, the name has stuck. I think that a truly decentralized crypto economy including games will be better when we are downloading native to the OS apps from decentralized storage. I am working on such a game myself but I am not ready to share the details.</p>
<p>Fourth, even if the cost of entry is not a barrier to you, it is a significant learning curve to understand all the bits of crypto infrastructure like wallets, exchanges, tokens, and NFTs required to get started.</p>
<p>Finally, there has been no end of scams and just downright crappy games that have given the haters more ammunition.</p>
<p>You might be thinking that web3 gaming is doomed. I actually believe that the use case is so compelling that all these problems can be overcome but it would take a whole book to explain why. If you are keen to find out more, check out my <a href="https://playearnown.com/">crypto tutorials for beginners</a>. If not, just sit back and wait for the revolution or, better, <a href="https://gamecodeschool.com/solidity-tutorials/">learn to code web3 games </a>with my new Solidity tutorials. On to the haters.</p>
<h2>Why do existing game developers and game media not like Web3 Gaming?</h2>
<p>There are a few reasons why existing game developers and game media may not like web3 gaming. Here are a few of the most notable:</p>
<p>Competition: Web3 gaming is a new and disruptive technology that could pose a threat to the existing gaming industry. This is because web3 games offer a more immersive and rewarding experience for players, which could lead to players abandoning traditional games in favor of web3 games.</p>
<p>Complexity: Web3 gaming is a complex technology that can be difficult to understand for both developers and players. This could make it difficult for developers to create web3 games, and for players to understand how to play them.</p>
<p>Regulation: Web3 gaming is a new and emerging industry, which means that there is a lack of regulation. This could make it difficult for developers and players to know what is and is not allowed in web3 games.</p>
<p>Web3 gaming is a new and exciting technology that has the potential to revolutionize the gaming industry. However, there are still a number of challenges that need to be addressed before web3 gaming can become mainstream. These challenges include the need for more developers to understand and adopt web3 technology, the need for more players to understand how to play web3 games, and the need for more regulation in the web3 gaming industry. Despite these challenges, the potential of web3 gaming is undeniable. With its focus on ownership, transparency, and interoperability, web3 gaming has the potential to create a more immersive, rewarding, and open gaming ecosystem for players.</p>
<h2>why has web3 gaming been slow to take off</h2>
<p>There are a number of reasons why web3 gaming has been slow to take off. Here are a few of the most notable:</p>
<p>High entry barrier: Web3 games require players to have a cryptocurrency wallet and to understand how to use it. This can be a barrier to entry for many players, especially those who are not familiar with cryptocurrency.</p>
<p>Lack of high-quality games: There are a number of web3 games available, but many of them are not very good. This has made it difficult for web3 gaming to attract a large number of players.<br />
Concerns about security and scams: There have been a number of scams and security issues associated with web3 gaming. This has made some players hesitant to participate in web3 gaming.</p>
<p>Regulation: The web3 gaming industry is still in its early stages, and there is a lack of regulation. This has made it difficult for developers and investors to know what is and is not allowed in web3 gaming.</p>
<p>Despite these challenges, the potential of web3 gaming is undeniable. With its focus on ownership, transparency, and interoperability, web3 gaming has the potential to create a more immersive, rewarding, and open gaming ecosystem for players. As the web3 gaming industry matures and these challenges are addressed, web3 gaming is poised to take off.</p>
<h3>Here are some of the things that can be done to help web3 gaming take off</h3>
<p>More developers need to create high-quality web3 games: There are a number of web3 games available, but many of them are not very good. This has made it difficult for web3 gaming to attract a large number of players. More developers need to create high-quality web3 games that are fun to play and that offer players a compelling experience.</p>
<p>The web3 gaming industry needs to address concerns about security and scams: There have been a number of scams and security issues associated with web3 gaming. This has made some players hesitant to participate in web3 gaming. The web3 gaming industry needs to address these concerns and take steps to ensure that players&#8217; assets are safe.</p>
<p>The web3 gaming industry needs to be regulated: The web3 gaming industry is still in its early stages, and there is a lack of regulation. This has made it difficult for developers and investors to know what is and is not allowed in web3 gaming. The web3 gaming industry needs to be regulated in a way that is fair to both developers and players.</p>
<p>If these things can be done, web3 gaming is poised to take off. With its focus on ownership, transparency, and interoperability, web3 gaming has the potential to create a more immersive, rewarding, and open gaming ecosystem for players.</p>
<h2>Examples and short descriptions of web3 games and platforms</h2>
<p>Axie Infinity: <a href="https://axieinfinity.com/">Axie Infinity</a> is a Pokemon-inspired game where players can collect, breed, and battle Axies, which are digital pets. Axies are non-fungible tokens (NFTs), which means that they are unique and can be traded or sold. Players can earn rewards in the form of Axie Infinity Shards (AXS) and Smooth Love Potions (SLP) by playing the game.</p>
<p>The Sandbox: <a href="https://www.sandbox.game/en/">The Sandbox</a> is a virtual world where players can create, own, and monetize their own gaming experiences. The Sandbox uses the Ethereum blockchain to power its economy, which means that players can buy, sell, and trade in-game assets using cryptocurrency.</p>
<p>Decentraland: <a href="https://decentraland.org/">Decentraland</a> is another virtual world that uses the Ethereum blockchain. Decentraland is a 3D world where players can explore, build, and interact with each other. Players can buy land in Decentraland, which they can then use to create their own games, experiences, and businesses.</p>
<p>Gods Unchained: <a href="https://godsunchained.com/">Gods Unchained</a> is a collectible card game where players can collect, trade, and battle cards. Gods Unchained uses the Immutable X blockchain, which is a layer-2 scaling solution for Ethereum. This means that players can trade battle cards without having to pay high gas fees.</p>
<p>Alien Worlds: <a href="https://alienworlds.io/">Alien Worlds</a> is a play-to-earn game where players can mine Trilium (TLM), the native token of the game. TLM can be used to buy land, upgrade tools, and participate in governance. Alien Worlds is one of the most popular web3 games, with over 1 million registered players.</p>
<p>These are just a few examples of the many web3 games and platforms that are available. Most of them are mediocre in their current sate but some of them are evolving rapidly. As the web3 gaming industry continues to grow, we can expect to see even more innovative and exciting games being developed.</p>
<h2>Summary</h2>
<p><a href="https://playearnown.com/all-the-trouble-in-the-world/#the-world-economic-forum-and-the-great-reset">The WEF </a>is coming for gaming make no mistake! They want to sanitize player interactions by promoting victimhood amongst certain demographics of gamers and once gamers have been pacified the advertisers will move in and a rental/advertising model for all consoles and eventually PCs through Windows 11 will ensue. You will own nothing and be happy. Web3 or whatever we end up calling it is the best chance we have of beating this dystopian future.</p>
]]></content:encoded>
			<wfw:commentRss>https://gamecodeschool.com/blog/web3-gaming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What is SFML and should I use it</title>
		<link>https://gamecodeschool.com/blog/what-is-sfml-and-should-i-use-it/</link>
		<comments>https://gamecodeschool.com/blog/what-is-sfml-and-should-i-use-it/#comments</comments>
		<pubDate>Mon, 09 Nov 2015 10:56:14 +0000</pubDate>
		<dc:creator><![CDATA[John Horton]]></dc:creator>
				<category><![CDATA[BLOG]]></category>

		<guid isPermaLink="false">http://gamecodeschool.com/?p=12519</guid>
		<description><![CDATA[First of all SFML is great and this is not a review about whether or not SFML is extremely cool or not. Trust me, it is extremely cool. This article will just explore what it can do, when it is best used and by whom. Also we will see who it is not for and [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>First of all SFML is great and this is not a review about whether or not SFML is extremely cool or not. Trust me, it <em>is</em> extremely cool. This article will just explore what it can do, when it is best used and by whom. Also we will see who it is not for and what it should not be used for.</p>
<h2>What SFML isn&#8217;t</h2>
<p>Let&#8217;s quickly state was SFML is not. It is not an all-in-one solution for all your game development needs like Unreal Engine, CryEngine or Unity. It will not let you design huge realistic 3d worlds, build 3d models or create movie-like cut-scenes. Although if you are quite expert you can make 3d games with it, that is not it&#8217;s strength. It does not offer point and click tools for even 2d games like Game Maker Studio although you can build amazing 2d games far better than anything that can be done in GameMaker Studio*.</p>
<h2>What it is</h2>
<p>SFML is perfect for writing 2d games of any size or complexity at all. If you want to learn game coding and your favourite device is your PC, Mac or Linux; SFML is the best choice providing the above limitations are not an issue for you. If you dream of publishing 2d games for any of the desktop platforms, perhaps you want to get your cool idea onto Steam? If this describes you then SFML is for you.</p>
<p>SFML stands for simple fast media library and for once the acronym is entirely accurate. Let&#8217;s deal with the simple bit first.</p>
<h3>Simple</h3>
<p>Take a look at this next code sample. Don&#8217;t try and understand it just scan your eyes over it and then continue with the article.</p>
<pre class="brush: cpp; title: ; notranslate">
// Win32Project4.cpp : Defines the entry point for the application.
//

#include &quot;stdafx.h&quot;
#include &quot;Win32Project4.h&quot;

#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst;                                // current instance
WCHAR szTitle[MAX_LOADSTRING];                  // The title bar text
WCHAR szWindowClass[MAX_LOADSTRING];            // the main window class name

// Forward declarations of functions included in this code module:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: Place code here.

    // Initialize global strings
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_WIN32PROJECT4, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    // Perform application initialization:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }

    HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32PROJECT4));

    MSG msg;

    // Main message loop:
    while (GetMessage(&amp;msg, nullptr, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &amp;msg))
        {
            TranslateMessage(&amp;msg);
            DispatchMessage(&amp;msg);
        }
    }

    return (int) msg.wParam;
}

//
//  FUNCTION: MyRegisterClass()
//
//  PURPOSE: Registers the window class.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEXW wcex;

    wcex.cbSize = sizeof(WNDCLASSEX);

    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIN32PROJECT4));
    wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_WIN32PROJECT4);
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

    return RegisterClassExW(&amp;wcex);
}

//
//   FUNCTION: InitInstance(HINSTANCE, int)
//
//   PURPOSE: Saves instance handle and creates main window
//
//   COMMENTS:
//
//        In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   hInst = hInstance; // Store instance handle in our global variable

   HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

//
//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND  - process the application menu
//  WM_PAINT    - Paint the main window
//  WM_DESTROY  - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // Parse the menu selections:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
        break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &amp;ps);
            // TODO: Add any drawing code that uses hdc here...
            EndPaint(hWnd, &amp;ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// Message handler for about box.
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}
</pre>
<p>That was pretty scary!</p>
<p>The previous code is what you need to do in Windows to get a <span style="text-decoration: underline;">completely empty window- that does absolutely nothing!</span></p>
<p>If you have read any game development tutorials in the past you will know that there are components that all games need. A place/interface to draw your graphics, like-wise to control the logic of the game and handle input from the player. Furthermore the above code does not include a controlled loop known as the game loop to repeatedly process and draw all the frames of the game. Add all that into the code above and you will at least quadruple the code and it will be spread over multiple complex files.</p>
<p>Now consider if you want your game to run on Mac, PC and Windows then all of this code will be different for each of the desktop operating systems.</p>
<p>In the next code sample all the lines of code that start with <span style="color: #008000;">//</span> are comments to explain what is happening. Now look at this SFML code:</p>
<pre class="brush: cpp; title: ; notranslate">
// Include some code from the SFML library
#include &lt;SFML/Graphics.hpp&gt;

// This is where our game starts
int main()
{
	// Make a window that is 1920 by 1080 pixels in size
    sf::RenderWindow window(sf::VideoMode(1920, 1080), &quot;My Cool Game&quot;);

    while (window.isOpen())
    {// Game loop starts here

        //Handle input from the keyboard, mouse and controller

		// Process movement, AI and other logic here

		// Rub out the last frame
        window.clear();

		// Draw the current scene here

		// Show the current scene
        window.display();

    }// Do all of the above over and over again

// User has quit- go back to the operating system
    return 0;
}
</pre>
<p>The previous code not only does everything that the rather frightening Windows code did but it also provides a place to draw, process logic and handle player input. Oh yes, and the curly brace <span style="color: #008000;">{</span> next to the <span style="color: #008000;">// Game loop starts here</span> comment, down to the closing curly brace <span style="color: #008000;">}</span> by the comment that says <span style="color: #008000;">// Do all of the above over and over again</span> is the game loop. The same code can also be made(compiled) to run on all three of the major desktop operating systems.</p>
<p>We can then draw things to the screen with simple code like this.</p>
<pre class="brush: cpp; title: ; notranslate">
// Draw a previously defined shape in the main game loop
window.draw(shape);
</pre>
<p>We can play soundFX with code like this:</p>
<pre class="brush: cpp; title: ; notranslate">
// Play a previously prepared sound
sound.play();
</pre>
<p>We could even send packets of data over the Internet to build multi-player games with code as simple as this:</p>
<pre class="brush: cpp; title: ; notranslate">
// Send a previously prepared message across the Internet to another computer
tcpSocket.send(message, msgSize);
</pre>
<p>It is true that as our projects grow into complete games they will become complex eventually but the point is that SFML is perfect, through it&#8217;s simplicity, for a beginner and yet because of it&#8217;s depth and speed is something we won&#8217;t grow out of if we have the dedication to become a professional. And we can steadily build up the complexity so it doesn&#8217;t overwhelm us.</p>
<p>What about the F for fast then?</p>
<h3>Fast</h3>
<p>C++ is a language which is turned (compiled) into native executable programs by the software (compiler) that we use to write our code. This means that it is super-fast because it works directly with the software subsystems of our computer without any layers to slow it down. I mentioned in the previous section that the simple SFML code we looked at previously included the game loop. On my ageing laptop that game loop runs at around 2000 frames per second. Of course as we add more logic and drawing into our games this will reduce but the point is SFML makes it simple to write very fast code.</p>
<h3>Media Library</h3>
<p>SFML is a library, a library of C++ code organized into 5 modules that handle all the fundamentals of game programming. We use the library by writing our own C++ code (like in the previous examples) to <strong>call</strong> the code from the SFML library. We don&#8217;t need to see this SFML library code, we don&#8217;t even really need to know how it works internally.</p>
<h2>SFML conclusion</h2>
<p>SFML <span style="text-decoration: underline;">IS NOT</span> for you if:</p>
<ul>
<li>You want to build amazing 3d worlds or characters especially if you want user friendly GUI tools</li>
<li>You want to build any type of game by pointing, clicking, dragging and dropping</li>
<li>You want your game done by tea time</li>
<li>You want to avoid learning and writing real code</li>
</ul>
<p>SFML <span style="text-decoration: underline;">IS</span> for you if :</p>
<ul>
<li>You want the fastest possible language and library</li>
<li>You want to learn to actually code games from scratch</li>
<li>You are looking for a fun way to learn C++</li>
<li>You want to make 2d games for desktop (Mac, Windows, Linux) that can go way beyond more friendly environments like GameMaker Studio</li>
<li>You aspire to be a professional/indie developer who has a career making 2d games for desktop**</li>
</ul>
<p>If you want to begin to learn C++ then take a look at the growing range of <a href="http://gamecodeschool.com/c-plus-plus-tutorials/">c++ game coding beginner tutorials</a> and if you want to dive in to SFML straight away here is my click by click <a href="http://gamecodeschool.com/sfml/setting-up-visual-studio-and-sfml-development-environment/">guide to getting started with SFML and Microsoft Visual Studio</a>.</p>
<p>*I am not knocking GameMaker Studio it is a great tool but there are differences. It is true that you could have a simple working game in GameMaker Studio much faster than with SFML and if that is your goal then I highly recommend it.</p>
<p>**SFML can actually make games for Android and iOS. At the time of writing I am not considering any tutorials because it is complex, relatively untested and there are arguably better and simpler ways to make cross platform games between mobile and desktop. This could change of course and if it does, by learning SFML now you will be well placed to learn the extra steps to make games for mobile devices.</p>
]]></content:encoded>
			<wfw:commentRss>https://gamecodeschool.com/blog/what-is-sfml-and-should-i-use-it/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Making games: Where do I start?</title>
		<link>https://gamecodeschool.com/blog/making-games-where-do-i-start/</link>
		<comments>https://gamecodeschool.com/blog/making-games-where-do-i-start/#comments</comments>
		<pubDate>Tue, 13 Jan 2015 13:12:18 +0000</pubDate>
		<dc:creator><![CDATA[John Horton]]></dc:creator>
				<category><![CDATA[BLOG]]></category>
		<category><![CDATA[Getting started]]></category>

		<guid isPermaLink="false">http://gamecodeschool.com/?p=11402</guid>
		<description><![CDATA[]]></description>
				<content:encoded><![CDATA[<p>So you want to make a game? Games can be powerful! To the gamer they can entertain, motivate, educate, persuade. They can cause visceral feelings like excitement, happiness, sadness and even fear. To you, the creator/programmer/designer, making games can give immense satisfaction and personal advancement, perhaps even fame and wealth.</p>
<p>So, you know you&#8217;re serious about building games but what should you do next?</p>
<h2>The 3 getting started questions of doom</h2>
<p>There are a lot of different ways to make games. Loads in fact. And a surprisingly high number of these options are suitable for complete beginners as well as the seasoned professionals. This is good because it gives us choice, but is awkward because this choice can cause confusion as to what is the best way. Are you going over and over the same 3 unanswered questions? I call them the &#8220;getting started questions of doom!&#8221;</p>
<p>1. Which is the best language (C++, C#, Java, insert half dozen more possibilities here) to use/learn?<br />
2. Which platform should I build for(PC, Android, iOS, something else, all of them)?<br />
3. Which game engine or gaming library (if any) should I use/learn?</p>
<p>If you feel confident that you already know the answer to these questions and just want to get game building then click the button below.</p>
<div class="fusion-one-full fusion-layout-column fusion-column-last fusion-spacing-yes" style="margin-top:0px;margin-bottom:20px;"><div class="fusion-column-wrapper"><div class="fusion-button-wrapper fusion-aligncenter"><style type="text/css" scoped="scoped">.fusion-button.button-1{border-width:1px;color:#ffffff;border-color:#ffffff;}.fusion-button.button-1:hover,.fusion-button.button-1:focus,.fusion-button.button-1:active{border-width:1px;border-color:#ffffff;color:#ffffff;}.fusion-button.button-1{background: #1a80b6;}.fusion-button.button-1:hover,.button-1:focus,.fusion-button.button-1:active{background: #349dd4;}</style><a class="fusion-button button-flat button-square button-xlarge button-custom button-1 fusion-animated" data-animationType="rubberBand" data-animationDuration="1" target="_self" href="http://gamecodeschool.com/game-development-courses/"><span class="fusion-button-text-right">Take me to the game programming courses</span><span class="button-icon-divider-right"><i class="fa fa-arrow-right"></i></span></a></div></div></div><div class="fusion-clearfix"></div><p>Trying to answer these questions is like trying to choose who to vote for before you have heard the policies. It&#8217;s stupid and leads to a very bad place.</p>
<p>Yet at the same time, the answer to these questions is vital if you are to be able to get started with confidence. Furthermore, trying to answer these questions directly will likely lead to no answers or even worse the wrong answers. Kind of like just listening to the political policies rather than considering if they are genuinely held beliefs and achievable. &#8220;I will make your life better&#8221;. You would be wise to ask, &#8220;how exactly&#8221;? Yet you must answer these questions and answer them correctly.</p>
<p>If you ever get that sinking feeling knowing you have just lost a day of your life on social media or watching daytime TV; trust me, that is nothing compared to months of learning a programming language, game engine or platform specific library when it turns out it can never deliver what you want. (No more political analogies).</p>
<p>The truth is there is no &#8220;best&#8221; platform, game engine or programming language! Anyone who tells you there is, without discussing it with you personally and in great depth first, is just plain wrong.</p>
<p>To help you arrive at the correct answers for you and get you started as quickly as possible, let&#8217;s start by answering three, much more useful(and easier to answer) questions.</p>
<h2>The 3 getting started questions of enlightenment</h2>
<span class="fusion-highlight light highlight1" style="background-color:#f1eb41;"><strong>Question 1: What would you consider to be a successful conclusion to your efforts at learning to make games?</strong></span>
<p>Here are a small selection of possible answers:</p>
<ul>
<li>You want to be the head programmer at Bethesda, Valve or ID etc.</li>
<li>Maybe you want to find fortune and fame as an indie dev’</li>
<li>Perhaps you just want the fastest, simplest route to getting something, nay anything published</li>
<li>You just want to have fun</li>
<li>Do you have a story inside your mind that absolutely must be told &#8211; sometime before you die</li>
<li>Something else entirely?</li>
</ul>
<p>Think about the first question a little before moving on to the second.</p>
<span class="fusion-highlight light highlight1" style="background-color:#f1eb41;"><strong>Question 2:</strong> <strong>What personal &amp; family price are you prepared to pay?</strong></span>
<p>Yes, there is always a price. If you go for a half hour run the price is half an hour lost on either work, family life or something else you might have done. You need to first accept that building a game is going to take a while. Should personal/family financial considerations take preference over any of these other goals and how much time are you prepared to put into this game programming thing? A weekend, a year, as long as it takes?</p>
<span class="fusion-highlight light highlight1" style="background-color:#f1eb41;"><strong>Question 3: What game do you want to make?</strong></span>
<p>There are so many different types of game and which one you want to make will certainly steer you towards different learning pathways, engines, and languages. Be sure to decide on the genre, 3D, 2D, First person shooter, RPG, survival, retro, something totally new, etc. Will your game work best on a particular device type or platform? Do you specifically want to target a particular platform or is it the more the merrier?</p>
<p>Notice that the above questions might be challenging and deep to answer but unlike the &#8220;getting started questions of doom&#8221;, the &#8220;getting started questions of enlightenment&#8221; don&#8217;t need Google, an expert or even me to help you answer them. The previous three questions can be consolidated as follows.</p>
<p><span style="text-decoration: underline;"><strong>Where do you want to go, what price are you prepared to pay and what game are you going to make next/first?</strong></span></p>
<p>Think about them for a bit, they will help you make the right decisions.</p>
<h2>I have answered the questions &#8211; Tell me the answers to the questions of doom already!</h2>
<p>By now you should know your personal game building goals, determination, and game specifics or at least be formulating them. Certainly, your goals might change along the way and you can always make changes in direction but at least you will be starting out based on what you want to achieve rather than the latest trend that sounded good at the time.</p>
<h2>Choosing a language, platform, and engine</h2>
<p>The platform might already be a part of your plans at this stage. The language and engine, however, still need to be chosen. In the table that follows you can easily target your language and engine options based on your genre and target platforms (if they are decided already).</p>
<p>Take a look over the following table. Use the priorities from your goals to target the appropriate game building solution (engine/library/tool) and then study the row (which represents the attributes of a specific game building solution) to see if it also matches your other priorities or requirements. There will always be a match! But, there will always be compromises to be made too. These are YOUR compromises based on YOUR goals. There are no universal right or wrong answers.</p>
<div class="fusion-table table-2">
<table width="100%">
<thead>
<tr>
<th width="10%">Tool</th>
<th width="20%">best-suited genres, programming languages &amp; target platforms</th>
<th width="35%">What&#8217;s great about this option?</th>
<th width="35%">What are the pitfalls of this option?</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>GameMaker Studio 2</strong></td>
<td>2D using optional GML (c-like language) or drag and drop visual programming for all platforms*</td>
<td>
<ul>
<li>GameMaker 2 means you can make entire 2D games without typing a single line of code by dragging and dropping</li>
<li>Use GML code if you prefer it to dragging and dropping</li>
<li>Definitely the easiest to get started with 2D games &#8211; bar none!</li>
<li>Beginner-friendly community</li>
</ul>
</td>
<td>
<ul>
<li>Currently in beta (7th November 2016)</li>
<li>$100 for version that deploys to desktop (watch out for Steam sales)</li>
<li>Expect to pay over $1000 to deploy to all platforms</li>
</ul>
</td>
</tr>
<tr>
<td><strong>Unity</strong></td>
<td>3D and 2D using C# for all platforms*</td>
<td>
<ul>
<li>Even 2D games are made simpler than dedicated 2D solutions with new Unity 2D features for sprites and 2D physics</li>
<li>By far the easiest to get started with 3D</li>
<li>Huge beginner-friendly community</li>
<li>Asset store beats all the competitors on choice</li>
</ul>
</td>
<td>
<ul>
<li>Simple 2D games have a greatly increased file size compared to dedicated 2D solutions</li>
<li>Asset store lags behind Unreal Engine for highest quality graphics etc.</li>
<li>Although there is a free personal edition there are lots of ways Unity can make you need to pay a monthly fee</li>
<li>Despite a recent upgrade, generally considered a less professional solution compared to UE4 and CryEngine</li>
<li>Some of the easier to find beginner tutorials need updating</li>
</ul>
</td>
</tr>
<tr>
<td><strong>Android Studio</strong></td>
<td>2D &amp; 3D genres using Java(predominantly) &amp; C++ (optionally) building games for all Android devices</td>
<td>
<ul>
<li>Very easy publish to a vast market that is virtually free to enter ($25 lifetime)</li>
<li>Excellent and accessible for complete beginners</li>
<li>Perfect to show your betas to friends and family without jumping through hoops</li>
</ul>
</td>
<td>
<ul>
<li>3D games are probably not for beginners</li>
<li>Even 2d games are slightly tougher than using solutions like LibGDX</li>
<li>Tough to get noticed on the Google Play app store</li>
</ul>
</td>
</tr>
<tr>
<td><strong>CryEngine</strong></td>
<td>3D genres using C++ &amp; Lua for all desktop platforms and consoles*</td>
<td>
<ul>
<li>Very easy to begin building 3d worlds but piecing together full games eventually becomes complex.</li>
<li>Want to work for AAA consider starting here.</li>
<li>Arguably the best-looking graphics of any game engine.</li>
<li>Amazing for designing 3d worlds.</li>
<li>No royalties!</li>
</ul>
</td>
<td>
<ul>
<li>Small monthly fee of $10</li>
<li>Arguably inferior tutorials and documentation compared to Unity and Unreal Engine</li>
</ul>
</td>
</tr>
<tr>
<td><strong>XCODE</strong></td>
<td>2D &amp; 3D genres using Objective-C, Swift for iOS &amp; Mac</td>
<td>
<ul>
<li>Perhaps the nicest development environment</li>
<li>The Swift option is arguably the best beginner game programming language</li>
<li>Build games for all Apple devices using really quick to grasp Swift or the more challenging (but flexible) Objective-C</li>
</ul>
</td>
<td>
<ul>
<li>Significant chance of having submissions declined (especially amateur games).</li>
<li>Awkward to show unpublished games to friends and family</li>
<li>$99- $299 + tax annual fee to submit games</li>
<li>Must have a Mac to develop</li>
<li>3D games are probably not for beginners</li>
</ul>
</td>
</tr>
<tr>
<td><strong>UnrealEngine</strong></td>
<td>3D or 2.5D genres are best suited using C++ and Blueprint visual scripting for all platforms including consoles*</td>
<td>
<ul>
<li> Free and fully featured to learn and develop</li>
<li>Arguably the best and fastest 3d engine</li>
<li>Amazing for designing 3d worlds and easy to get started</li>
<li>Loads of up-to-date beginner tutorials</li>
<li>Simple, visual scripting alternative to C++ programming</li>
<li>Want to work for AAA consider starting here</li>
</ul>
</td>
<td>
<ul>
<li>5% Gross royalty payable on turnover for released titles</li>
<li>Finishing a full 3D game is a seriously big job</li>
<li>C++ in an Unreal Engine context is not for beginners, perhaps not even intermediate programmers</li>
</ul>
</td>
</tr>
<tr>
<td><strong>SFML</strong></td>
<td>2D genres using C++ primarily building games for desktop platforms</td>
<td>
<ul>
<li>Very fast</li>
<li>Modern OOP language</li>
<li>Possibly the fastest, smoothest 2d games for desktop can be made using SFML</li>
</ul>
</td>
<td>
<ul>
<li>C++ is arguably one of the harder languages to learn and get started but SFML can actually ease this process</li>
<li>Smaller user base than SDL, less online tutorials available.</li>
<li>The community can be slightly unforgiving to complete beginners</li>
</ul>
</td>
</tr>
<tr>
<td><strong>RPG Maker MV</strong></td>
<td>2D genres using Javascript for all desktop and mobile platforms</td>
<td>
<ul>
<li>Getting started is possible for any determined beginner</li>
<li>Perfect for retro RPG’s especially with turn based fighting.</li>
<li>Free trial or cheap older versions available</li>
<li>Loads of character and scenery packs available for a fee</li>
</ul>
</td>
<td>
<ul>
<li>Won’t do anything except 2D retro RPG&#8217;s without lots of effort</li>
<li>Even this latest version makes the games look clunky on large screens</li>
<li>Full version $70 (watch out for Steam sales)</li>
</ul>
</td>
</tr>
<tr>
<td><strong>SDL</strong></td>
<td>2D &amp; 3D genres using the C language for desktop and mobile platforms</td>
<td>
<ul>
<li>Very fast</li>
<li>Loads of tutorials available (if you already know C)</li>
<li>Perfect for porting old code written in C to mobile</li>
</ul>
</td>
<td>
<ul>
<li>Complete beginners might need a beginner C programming book first</li>
<li>Uses out-of-date language.</li>
<li>Mobile implementation is not a good place to start for beginners because of extra complexity compared to LibGDX, Android Studio or XCode options</li>
</ul>
</td>
</tr>
<tr>
<td><strong>LibGDX</strong></td>
<td>2D &amp; 3D genres using the Java programming language for all desktop and mobile platforms</td>
<td>
<ul>
<li>Totally free and cross platform</li>
<li>Very beginner friendly support community provided you know Java well (Consider learning regular Android &amp; Java in preparation for LibGDX)</li>
</ul>
</td>
<td>
<ul>
<li>3D options are primitive compared to Unity, Unreal, etc.</li>
<li>Need to learn Java first, difficult to learn Java at same time as LibGDX</li>
<li>Arguably slower performance on iOS</li>
<li>Unarguably slower performance on the desktop platforms compared to SDL or SFML</li>
<li>3D has very little documentation</li>
</ul>
</td>
</tr>
<tr>
<td><strong>Cocos</strong></td>
<td>2D using C++, JavaScript, Lua for<br />
Mobile &amp; Windows</td>
<td>
<ul>
<li>Totally free and cross platform</li>
<li>Very beginner friendly support community provided you know C++ well</li>
<li>Loads of successful games to point to especially for mobile</li>
</ul>
</td>
<td>
<ul>
<li>Mobile focussed so might be better off with SDL or SFML for desktop games</li>
</ul>
</td>
</tr>
<tr>
<td><strong>Quest</strong></td>
<td>Text based adventures (static images too) running on the Web, Windows &amp; mobile devices</td>
<td>
<ul>
<li>Totally free</li>
<li>Beginner friendly tutorials and forums</li>
<li>Thousands of example text adventures to play and see what is possible</li>
</ul>
</td>
<td>
<ul>
<li>Requires a bit of a fiddle to make thing s work well on mobile</li>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
<p class=""><em>* Separate developer license required from each console manufacturer.</em></p>
<p class=""><span style="text-decoration: underline;"><em>Disclaimer: There are even more ways of building games.</em></span></p>
<p>Hopefully building a clear view of exactly what it is you want to achieve will make the table of options super-useful in identifying the best path for you. Having started to nail down or at least tentatively Blu-tac your answers to the getting started questions of doom you will need to know where to go next.</p>
<h2>Matching your choices to learning pathways &#8211; Game programming courses</h2>
<p>I have started putting together some &#8220;learning pathways&#8221; in the form of game programming courses. Each course comprises multiple modules. They are designed to take you from complete beginner to developer. Some of the modules are completely free, some are paid and others are a bit of both.</p>
<p>Once you have chosen a pathway/course the only other question that needs answering is what knowledge if any do you already have with your chosen language/platform(s)/engine etc? Compare the <span style="color: #008000;">Knowledge Checklist</span> section of each module of your chosen pathway/course to see which ones you can skip and when required click the <span style="color: #008000;">Module Content</span> tab to see the specific tutorials, projects, books and videos required to gain the knowledge.</p>
<p>As you can see below, all the courses are not available yet. They will be soon I promise. Eventually, I will have a pathway/course for every viable option but it takes quite a significant amount of time to put each one together. Where the full detailed course and its modules are not available but I have started on tutorials, I point you instead to the appropriate beginner programming language tutorials and engine/library example projects. These tutorials and projects start from zero knowledge just like the courses.</p>
<p>It is now that you might get this funny feeling in your stomach. A feeling of anticipation, excitement and urgency. You will absolutely know- without any doubt that not only have you got a game inside of you but you can get it out too.</p>
<div class="fusion-one-half fusion-layout-column fusion-spacing-yes" style="margin-top:0px;margin-bottom:20px;"><div class="fusion-column-wrapper"><style type='text/css'>.reading-box-container-1 .element-bottomshadow:before,.reading-box-container-1 .element-bottomshadow:after{opacity:0.7;}</style><div class="fusion-reading-box-container reading-box-container-1" style="margin-bottom:84px;"><div class="reading-box reading-box-center element-bottomshadow" style="background-color:#f6f6f6;border-width:3px;border-color:#f6f6f6;border-top-width:3px;border-top-color:#1a80b6;border-style:solid;"><h2>ANDROID GAME PROGRAMMING COURSE</h2><div class="reading-box-description">Beginner to developer</div><a href="http://gamecodeschool.com/courses/android-game-programming/"><img class="aligncenter size-full wp-image-14784" src="http://gamecodeschool.com/wp-content/uploads/2016/09/android-game-programming-course-beginner-to-developer.jpg" alt="android-game-programming-course-beginner-to-developer" width="400" height="532" /></a><br />
Build more than a dozen playable games, in excess of 50 working apps and a bit of theory too!</div></div></div></div><div class="fusion-one-half fusion-layout-column fusion-column-last fusion-spacing-yes" style="margin-top:0px;margin-bottom:20px;"><div class="fusion-column-wrapper"><style type='text/css'>.reading-box-container-2 .element-bottomshadow:before,.reading-box-container-2 .element-bottomshadow:after{opacity:0.7;}</style><div class="fusion-reading-box-container reading-box-container-2" style="margin-bottom:84px;"><div class="reading-box reading-box-center element-bottomshadow" style="background-color:#f6f6f6;border-width:3px;border-color:#f6f6f6;border-top-width:3px;border-top-color:#1a80b6;border-style:solid;"><h2>UNITY 2D GAME PROGRAMMING COURSE</h2><div class="reading-box-description">Beginner to developer</div><img class="aligncenter size-full wp-image-14811" src="http://gamecodeschool.com/wp-content/uploads/2016/09/unity-2d-game-programming-course-beginner-to-developer.jpg" alt="unity-2d-game-programming-course-beginner-to-developer" width="400" height="532" /><br />
<strong>Coming Soon!</strong></p>
<p>If you are new to game programming with Unity then while you are waiting for the full course, take a look at these <a href="http://gamecodeschool.com/c-sharp-tutorials/">beginners C# tutorials</a> and these beginner <a href="http://gamecodeschool.com/unity-projects/">Unity game projects</a>.</div></div></div></div><div class="fusion-clearfix"></div><div class="fusion-one-half fusion-layout-column fusion-spacing-yes" style="margin-top:0px;margin-bottom:20px;"><div class="fusion-column-wrapper"><style type='text/css'>.reading-box-container-3 .element-bottomshadow:before,.reading-box-container-3 .element-bottomshadow:after{opacity:0.7;}</style><div class="fusion-reading-box-container reading-box-container-3" style="margin-bottom:84px;"><div class="reading-box reading-box-center element-bottomshadow" style="background-color:#f6f6f6;border-width:3px;border-color:#f6f6f6;border-top-width:3px;border-top-color:#1a80b6;border-style:solid;"><h2>ANDROID APPLICATION PROGRAMMING COURSE</h2><div class="reading-box-description">Beginner to developer</div><img class="aligncenter size-full wp-image-14789" src="http://gamecodeschool.com/wp-content/uploads/2016/09/android-application-programming-course-beginner-to-developer.jpg" alt="android-application-programming-course-beginner-to-developer" width="400" height="532" /><br />
<strong>Coming Soon!</strong></p>
<p>While you&#8217;re waiting for the full course to be available take a look at my book <a href="http://gamecodeschool.com/books/android-programming-for-beginners/">Android Programming for Beginners</a>.</div></div></div></div><div class="fusion-one-half fusion-layout-column fusion-column-last fusion-spacing-yes" style="margin-top:0px;margin-bottom:20px;"><div class="fusion-column-wrapper"><style type='text/css'>.reading-box-container-4 .element-bottomshadow:before,.reading-box-container-4 .element-bottomshadow:after{opacity:0.7;}</style><div class="fusion-reading-box-container reading-box-container-4" style="margin-bottom:84px;"><div class="reading-box reading-box-center element-bottomshadow" style="background-color:#f6f6f6;border-width:3px;border-color:#f6f6f6;border-top-width:3px;border-top-color:#1a80b6;border-style:solid;"><h2>C++ GAME PROGRAMMING COURSE</h2><div class="reading-box-description">Beginner to developer</div><img class="aligncenter size-full wp-image-14792" src="http://gamecodeschool.com/wp-content/uploads/2016/09/c-plus-plus-sfml-game-programming-course-beginner-to-developer.jpg" alt="c-plus-plus-sfml-game-programming-course-beginner-to-developer" width="400" height="532" /><br />
<strong>Coming Soon!</strong></p>
<p>While you are waiting for the full C++ game programming course to be available take a look at these <a href="http://gamecodeschool.com/c-plus-plus-tutorials/">beginners C++ tutorials</a> and these <a href="http://gamecodeschool.com/sfml-projects/">SFML game programming projects</a>.</div></div></div></div><div class="fusion-clearfix"></div>
<h3></h3>
]]></content:encoded>
			<wfw:commentRss>https://gamecodeschool.com/blog/making-games-where-do-i-start/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
	</channel>
</rss>
