I noticed in the first post you said this:
Quote: "the best way to start learning about 3D and object oriented programming"
Dark Basic Pro is procedural and can't do Object Orientated Programming. However, using C++ with Dark GDK you can and in C# you're pretty much forced into it.
For C++ I have '
C++ for Dummies', it's a nice beginner's guide to getting over the main concepts in C++ and I am reading through it at the moment and following its tutorials. The nice thing is, it ends on object orientated programming and goes into depth with classes. I've also got C# for Dummies by the same author but didn't end up using it.
But as said, no harm in starting University without this prior knowledge, but until you start get accepted into a Uni, getting ahead start is awesome. I get the feeling C++/C# might sound like what you're looking for. Dark Basic Pro is a great introduction to programming and a fantastic and powerful tool. Good news is Dark GDK has a free version, so I think it's worth giving it a try and see how well you do at learning to use C++ and then maybe you can work out what would be the most comfortable direction. I would say, you don't
need to learn an easier language first just to get into C++. Again, it just depends on you. I think Dark GDK would definitely make life easier than the alternatives in C++.
And on the plus side, this forum is great at offering support, should you get stuck, people are usually more than happy to help out.
[edit]
Here is a simple example from Dark GDK in C++ (to give an idea of what it looks like) - this is taken from the samples included with the package:
// Dark GDK - The Game Creators - www.thegamecreators.com
// whenever using Dark GDK you must ensure you include the header file
#include "DarkGDK.h"
// the main entry point for the application is this function
void DarkGDK ( void )
{
// turn on sync rate and set maximum rate to 60 fps
dbSyncOn ( );
dbSyncRate ( 60 );
// switch to the media directory, load our world
// and turn lighting off
SetCurrentDirectory ( "media" );
dbLoadObject ( "universe.dbo", 1 );
dbSetObjectLight ( 1, 0 );
// load a model for our sky
dbLoadObject ( "skybox2.x", 2 );
dbSetObjectLight ( 2, 0 );
dbSetObjectTexture ( 2, 3, 2 );
dbScaleObject ( 2, 5000, 5000, 5000 );
// position the camera
dbPositionCamera ( 434, 42, -517 );
// camera variables
float fCameraAngleX = 0.0f;
float fCameraAngleY = 0.0f;
// our main loop
while ( LoopGDK ( ) )
{
// move the camera using the arrow keys
dbControlCameraUsingArrowKeys ( 0, 5.0f, 0.3f );
// create a rotation axis based on mouse movement
fCameraAngleX = dbWrapValue ( fCameraAngleX + dbMouseMoveY ( ) * 0.4f );
fCameraAngleY = dbWrapValue ( fCameraAngleY + dbMouseMoveX ( ) * 0.4f );
// rotate camera
dbXRotateCamera ( fCameraAngleX );
dbYRotateCamera ( fCameraAngleY );
// update the screen
dbSync ( );
}
// return back to windows
return;
}
Of course, that's a fairly basic example, a full game would be complex, but you can see the code above is pretty straight forward, even if you don't understand it yet.
In Dark Basic Pro this is the equivalent:
`%Project Title%
`%Source File Name%
`======================
sync on
sync rate 60
set dir "media"
load object "universe.dbo", 1
set object light 1,0
load object "skybox2.x", 2
set object light 2,0
set object text 2,3,2
scale object 2,5000, 5000, 5000
position camera 434, 42, -517
fCameraAngleX# = 0.0
fCameraAngleY# = 0.0
do
control camera using arrowkeys 0, 5.0, 0.3
fCameraAngleX# = wrapvalue ( fCameraAngleX# + mousemovey() * 0.4)
fCameraAngleY# = wrapvalue ( fCameraAngleY + mousemovex() * 0.4)
xrotate camera fCameraAngleX
yrotate camera fCameraAngleY
sync
loop