Your first tiny game idea
A game remembers things, follows rules, and responds to a player. Before moving a spaceship, make a program that remembers a hero's name and score. You will learn to save your instructions, compile them, and run the result.
SMILE means Simple Modern and Intuitive Language for Everyone. SMILE 2.0 is a programming language and toolchain created by Louiery R. Sincioco (Sin), with Codex collaboration. These lessons describe the current language, using small examples you can change.
Set up the current Windows toolchain
Start on a Windows computer. If this is a shared family or school computer, a teacher or adult can help prepare the development tools. The repository currently documents these prerequisites:
- Windows 11 x64.
- PowerShell 7, the command window used in the steps below.
- .NET SDK 10.0.400, selected by the repository's
global.json. - Visual Studio 2026 with Desktop development with C++. Building the editor extension also needs Visual Studio extension development.
The current extension manifest and installation script target Visual Studio Enterprise. This guide does not promise support for other editions. You can also use the compiler commands below once the native build tools are available.
- Get the source from the official SMILE 2.0 repository and open PowerShell in its root folder. The repository root contains
README.mdand thescriptsfolder. - Run the prerequisite checker, then build the toolchain:
pwsh -NoProfile -ExecutionPolicy Bypass -File scripts\doctor.ps1
.\scripts\build.cmd
The build produces artifacts\compiler\smilec.exe (the compiler) and artifacts\vsix\Smile.VisualStudio.vsix (the editor extension). Resolve any prerequisite error before continuing.
For Visual Studio integration, save your work and close Visual Studio, then run the repository's installation script. Reopen Visual Studio when installation finishes:
.\scripts\install-vsix.cmd --skip-build
You can skip rebuilding the toolchain. Use your installed compiler and extension. The lessons do not need game art, character models, or third-party game libraries.
Write “Hello, Nova!”
In Visual Studio, create a SMILE 2.0 Console Application and replace the starter source with this code. A console program writes text; it is a useful place to test your game's rules before adding pictures.
You can instead download language-hello.smile and its project file. Save both in the same folder, keeping their filenames, and open the .smileproj in Visual Studio.
' My first SMILE 2.0 program.
Option Explicit
Dim HeroName As Text
Dim Score As Number
HeroName = "Nova"
Score = 10
Print "Hello, " + HeroName + "!"
Print "Your first score: "; Score
End Program
| Line or symbol | What it tells the computer |
|---|---|
' | The rest of this line is a comment for humans. |
Option Explicit | Require every variable to be declared, so misspelled names are caught. |
Dim HeroName As Text | Make a named place to store text. |
HeroName = "Nova" | Put the text Nova into that variable. The quotation marks describe text; they are not part of the name. |
+ between texts | Join pieces of text together. |
Print ... ; Score | Write the label and the number on the same line without converting the number to text. |
End Program | Finish the program. |
Build it. Run it. Change it.
In Visual Studio, save your file, build the project, and use Ctrl+F5 to run without debugging. F5 runs with the debugger, which lets you pause and inspect variables. If the console closes before you can read it, use the command-line route below.
For the command-line route, put the downloaded files in a folder called MyFirstSmile inside your repository root. These commands are entered in PowerShell at the repository root:
& ".\artifacts\compiler\smilec.exe" --project ".\MyFirstSmile\language-hello.smileproj" -o ".\MyFirstSmile\HelloSmile.exe"
& ".\MyFirstSmile\HelloSmile.exe"
The first command builds the executable. The second starts it. The standard SMILE startup branding may appear before the output. The lesson's output is:
Hello, Nova!
Your first score: 10
Now change "Nova" to your hero's name and 10 to 25. Save, compile, and run again. You have changed your first game state.
The example folder is a choice, not a special folder required by SMILE. Put quotation marks around a path when it contains spaces. In PowerShell, & lets you run a quoted executable path.
Source code and project files do different jobs
| File | Its job |
|---|---|
.smile | Contains the actual language instructions that you write. |
.smileproj | Lists the source files, startup file, project kind, assets, and library references. |
.exe | The compiled native Windows program. |
.smilelibproj / .smilelib | A reusable library project / its compiled package. You will meet these in Libraries. |
See the tiny project file used by this lesson
This is XML project configuration, not SMILE code. StartupFile chooses the file whose top-level instructions run.
<SmileProject Version="1.0">
<PropertyGroup>
<ProjectKind>Console</ProjectKind>
<StartupFile>language-hello.smile</StartupFile>
<OutputName>HelloSmile</OutputName>
</PropertyGroup>
<ItemGroup>
<SmileSource Include="language-hello.smile" StartupOnly="true" />
</ItemGroup>
</SmileProject>For a single source file, a project file is optional. This equivalent command compiles the source directly:
& ".\artifacts\compiler\smilec.exe" ".\MyFirstSmile\language-hello.smile" -o ".\MyFirstSmile\HelloSmile.exe"
Make one mistake on purpose
Change Score = 10 to Scroe = 10, then build. With Option Explicit, the compiler reports the unknown name. Read the file and line in the diagnostic, fix the spelling, and build again. An error message is a clue about which instruction needs attention.
| What happens | What to check |
|---|---|
| Unknown variable name | Check its spelling and Dim ... As ... declaration. |
| Text or syntax error | Check both quotation marks and keep each statement on its own line. |
| Type mismatch | A number and a piece of text are different kinds of value. Use ; to print them together. |
| Old output after an edit | Save the source, build successfully, and run the newly built executable. |
| Native build tools unavailable | Run scripts\doctor.ps1 and check the required C++ workload. |
Your mission: a welcome screen in words
Add a Lives variable of type Number. Give the player three lives and print Lives: 3 on a new line.
Reveal one solution
Add the declaration beside the other declarations, the assignment beside the other assignments, and the print before End Program.
Dim Lives As Number
Lives = 3
Print "Lives: "; Lives