quote:
Originally posted by deAd
quote:
Originally posted by SpunkyLoveMuffcode:
var SW_MINIMIZE = 0x6;
Interop.Call('user32', 'ShowWindow', game.Handle, SW_MINIMIZE);
Why not:
code:
Interop.Call('user32', 'ShowWindow', game.Handle, 0x6);
in my opinion its better/more convenient to use constants like that, however I'd declare them globally instead of locally in the function :/
If it is just for 1 line of code, like in this script, you can do something like:
Interop.Call('user32', 'ShowWindow', game.Handle, /* SW_MINIMIZE */ 0x6);
-------------------------------------------------------------
anyways, roflmao456
some tips:
- Start by indenting lines of code properly with tabs. This will make possible errors and optimizations visible in an instant.
- Remove the need for all those global variables. You will need some global variables, but not all of those.
- Declaring an activex object in global space isn't needed at all. Declare it where you need it.
- Use an array as your play grid instead of all those sequencial variables a1, a2, a3, b1, b2, etc...
- Determining who won can be made shorter. And it also contains a duplicated check for both sides btw.
Don't check each side individually, but simply check if squares are equal (using the method above). And if they are, only then determine to which side the squares are belonging. In other words, use the opposite of the logic you use now. This will make the whole checking faster and shorter and will reduce the needed checks from the currently 18 to 8 checks.
And if you take in account the last move (which is the only one which might trigger a win situation of course) and you use an array as your playing grid you could reduce this even further to only 3 or 4 checks (for a horizontal, a vertical and a diagonal solution).
So you don't need all those checks since the only way that someone can have 3 in a row is when the middle square of the sequence is equal to the left and right side square of it, or upper and lower side of it, or up-left and down-right, or down-left and up-right. And if so, any of the three squares making a solution will always hold the sign of the winning party. Or even shorter: if a winning solution is made, the winning party will always be the one who last made a move, thus you actually don't even need to check the signs in the squares.
- Some code in checkWin() is also duplicated, so remove that and put it above the structure where it is nested in (the
alertmsg and
canMove variables).
In addition to this, since the only thing you change in the
if(won == "O"){} check is the name of the side that won, you can easly remove that check and simply place
won as a variable in that sentence since it already identifies who won.
- In the
OnEvent_Timer(timerId) function replaces those
if_then_else's with a
switch statement.
- Change the "
!tic-tac-toe" command to "
/tic-tac-toe". Commands in Plus! start with "/", so that is what the user is used to.
(and personally I would remove the "-" in the command, but that's just pure personal preference)
- Take in account that the user can type commands in uppercase to. So add a .tolowercase() to the command catching routines.
- The rest is just a big mess in code atm and I cba to fix all the indenting first to check the code further, see point 1
- Change things like:
code:
if (Origin != Messenger.MyName) {
if (Message.substr(0,12) == "!tic-tac-toe"){
}
}
if (Origin == Messenger.MyName){
if (Message.substr(0,12) == "!tic-tac-toe"){
}
}
to:
code:
if (Message.substr(0,12) === "!tic-tac-toe"){
if (Origin === Messenger.MyName) {
} else {
}
}
which is shorter and easier to maintain.
- Chage stuff like
code:
if(Message.substr(0,3)!="!a1"){
if(Message.substr(0,3)!="!a2"){
if(Message.substr(0,3)!="!a3"){
if(Message.substr(0,3)!="!a1"){
if(Message.substr(0,3)!="!a2"){
if(Message.substr(0,3)!="!a3"){
if(Message.substr(0,3)!="!b1"){
if(Message.substr(0,3)!="!b2"){
if(Message.substr(0,3)!="!b3"){
if(Message.substr(0,3)!="!c1"){
if(Message.substr(0,3)!="!c2"){
if(Message.substr(0,3)!="!c3"){
//dosomething
}}}}}}}}}
to at least 1 check using an AND operator.
Or better yet, use a single regular expression.
Also you use such a bunch of checks twice inside an if_then_else, once for the true part and once for the false part. So switch this logic around and use those bunch of checks as the first main checks and only then do the check you otherwise did first (
if(chat.GetControlText("chatAll")){).
- the design of the game window is nice