this is the silly code I was working on. not yet fixed or complete. it is a math drill program for my second grade daughter to better her skills. just use your own font :
'math program SuperStrict Type tmath Field x%,y% Field operand% Field operator% Field answer% Field text$ Field txt$ Field width% Field sign$ Field correct% Field wrong% Field index% Field density%[] = [10,20,30,40,50] Global level% = 0 Global completed%[4] Method create() Abstract Method Inputs:String(x1% = -1,y1% = -1) If x1 = -1 Then x1 = x If y1 = -1 Then y1 = y Local c:String = Chr(GetChar()) If txt.length < width Then If c=>"0" And c <="9" Then txt=txt+c If KeyHit(KEY_BACKSPACE) And SizeOf(txt)>1 Then txt = Left$(txt,txt.length-1) SetColor 0,255,0 DrawText txt,x,y If KeyHit(KEY_ENTER) Local name:String = txt; txt = Null ;Return name End Method Method generate() operand = Rand(0,9) operator = Rand (0,9) If operand < operator Local temp% = operand operand = operator operator = temp EndIf End Method Method display() Local d$ = RSet(String(operand),4) Local r$ = sign+RSet(String(operator),3) Local tx1% = (GraphicsWidth()-TextWidth(text)) Local rx1% = (GraphicsWidth()-TextWidth(r$)) Local dx1% = (GraphicsWidth()-TextWidth(d$)) Local sx% = (GraphicsWidth()-TextWidth("____")) Local h% = TextHeight("X") Local w% = TextWidth("____") Local th% = (GraphicsHeight()-h) SetColor 200,50,0 DrawText text,tx1/2,th/8 SetColor 50,200,0 DrawText d$,dx1/2,th/4 SetColor 0,50,200 DrawText r$,rx1/2,th/4+h SetColor 200,50,50 DrawText "____",sx/2,th/4 + h+10 DrawRect sx/2,th/4 + h*3,w,h x = sx/2+w - TextWidth(String(answer)) y = th/4+h*3 End Method End Type Type Taddition Extends Tmath Method create() text = "ADDITION" sign = "+" generate() answer = operand + operator width = String(answer).length End Method End Type Type Tsubtraction Extends Tmath Method create() text$ = "SUBTRACTION" sign$ = "-" generate() answer = operand - operator width = String(answer).length End Method End Type Type Tmultiplication Extends Tmath Method create() text$ = "MULTIPLICATION" sign$ = "X" generate() answer = operand * operator width = String(answer).length End Method End Type Type Tdivision Extends Tmath Method create() text$ = "DIVISION" sign$ = "/" Repeat generate() Until operator > 0 answer = operand * operator Local temp% = answer answer = operand operand = temp width = String(answer).length End Method Method display() Local d$ = String(operand) Local r$ = String(operator) Local tx1% = (GraphicsWidth()-TextWidth(text)) Local rx1% = (GraphicsWidth()-TextWidth(r$)) Local dx1% = (GraphicsWidth()-TextWidth(d$)) Local sx% = (GraphicsWidth()-TextWidth("____")) Local h% = TextHeight("X") Local w% = TextWidth("____") Local th% = (GraphicsHeight()-h) SetColor 200,50,0 DrawText text,tx1/2,th/8 SetColor 50,200,0 DrawText "____",rx1/2,th/4+h SetColor 0,50,200 DrawText r$,rx1/2-TextWidth("X"),th/4+h*2-12 SetColor 50,200,0 DrawText "|",rx1/2-12,th/4+h*2-12 SetColor 200,50,50 DrawText d$,rx1/2-12+TextWidth("|"),th/4+h*2-12 DrawRect rx1/2,th/4+h-12,w,h x = rx1/2+12 y = th/4+h End Method End Type Function lesson%(Math:tmath Var,z% Var ) If z Then Math.create() z=0 Else DrawText " Correct = "+math.correct,0,0 DrawText " Wrong = "+math.wrong,400,0 If tsubtraction(math) Then DrawText "index = "+tsubtraction(math).index,0,200 Math.display() Local c$ = math.inputs() If c$ Local check% =Int(c$) If check = Math.answer z = 1 math.correct:+1 Else math.wrong :+ 1 EndIf If math.density[math.level]<math.correct Then math.completed[math.index] = True math = Null FlushKeys EndIf EndIf EndIf End Function Function menu:tmath(z% Var) DrawText " MENU",200,100 DrawText " 1 addition",200,200 DrawText " 2 subtraction",200,200+TextHeight("X") DrawText " 3 division ",200,200+TextHeight("X")*2 DrawText " 4 multiplication",200,200+TextHeight("X")*3 Local M:tmath Select 1 Case KeyHit(KEY_1) z = 1 FlushKeys() M= New taddition If m.completed[0] Then Return Null Return M Case KeyHit(KEY_2) z = 1 FlushKeys () M = New Tsubtraction If m.completed[1] Then Return Null Return M Case KeyHit(KEY_3) z = 1 FlushKeys() M = New Tdivision If m.completed[2] Then Return Null Return M Case KeyHit(KEY_4) z = 1 FlushKeys() M = New Tmultiplication If M.completed[3] Then Return Null Return M End Select End Function Graphics 800,600,16 '640,480,16 Local font:timagefont = LoadImageFont("TT1001M_.TTF",48,SMOOTHFONT) SetImageFont(font) Local math:Tmath SeedRnd MilliSecs() 'addition.create() 'subtraction.create() 'multiplication.create() Local z% Repeat If math lesson%(math,z) Else math=menu(z) If math math.correct= 0 math.wrong = 0 math.level= 0 EndIf EndIf Flip() Cls() Until KeyDown(KEY_ESCAPE)