mirror of
https://github.com/sam-astro/Z-Sharp.git
synced 2025-12-10 15:52:12 +00:00
Z#, Z-Sharp
Z-Sharp is a custom programming language I made because I don't like c++ very much (Z-Sharp's interpreter is written in c++ though). It used to be called Slang, standing for "Stupid Lang", but another programmig langauge called Slang already exists :(. Z-Sharp scripts have the file extension .zs. The base syntax and formatting I would say is quite similar to C#, but differs as task complexity increases. It has support for graphics using SDL2, and by default is not enabled. Here is some example code.
// Comments are indicated by two forward slashes
// They can only be on their own line
// int j = 4 // <- This is invalid comment placement
// All programs start with a main function
func Main()
{
int i = 0
string s = "r"
i += 2
i -= 1
i /= 3
i *= 2
while i < 10
{
i += 1
}
if s == "r"
{
print s + " is r"
}
int functionNumber = ExampleFunction("A", s)
ExampleFunction(1, 3)
GlobalFunction()
}
// Declare new function with 'func', then it's name, and the names of any input variables.
// The input variables don't need type, as those are automatic. Also, they don't need to
/// be assigned at all on execute and can be left blank
func ExampleFunction(inputA, inputB)
{
print "In A is: " + inputA
print "In B is: " + inputB
// Return a value to the valling location
return 4
}
func GlobalFunction()
{
// Create variables that can be accessed from anywhere (ex. in Main or ExampleFunction) with the 'global' keyword before type
global int x = 12
global string y = "Y String"
}
Here is how to use graphics:
func Main()
{
int screenWidth = 500
int screenHeight = 500
ZS.Graphics.Init("Title of window", screenWidth, screenHeight)
// After graphics are initialized, the main function will not finish.
// Instead, Start() will be called a single time, then Update() every frame after that.
}
// Runs once at start of graphics initialization
func Start()
{
// Vec2 are initialized using function 'NVec2(x, y)'
Vec2 position = NVec2(250, 250)
Vec2 scale = NVec2(20, 20)
float rotation = 0
// Sprite object, stores (and loads from file) the texture, location, scale, and rotation
global Sprite exampleSprite = ZS.Graphics.Sprite("./square.png", position, scale, rotation)
}
// Executes each frame
func Update()
{
// Draws the image created in Start(). This is usually at the end of update.
ZS.Graphics.Draw(exampleSprite)
}
Languages
C++
71.2%
CMake
9.3%
C
8.2%
Makefile
6.5%
Inno Setup
4.8%