To register for an Internet.com membership to receive newsletters and white papers, use the Register button ABOVE.
To participate in the message forums BELOW, click here


A Flash Developer Resource Site

Go Back   Flash Kit Community Forums > Flash Help > Flash ActionScript

Reply
 
Thread Tools Search this Thread Display Modes
Old 10-06-2004, 07:14 PM   #1
alexanderclark
Member
 
Join Date: Mar 2003
Posts: 57
A.I. in action script?

Hello there,

Im creating a fighting game (like street fighter) the problem Im having now is that I need to figure out how to create an AI for the enemy - right now all i have is this :

newx = _root.philo._x;
distx = int(getProperty(this, _x)-newx);
z = (distx*distx)+(disty*disty);
hyp = Math.sqrt(z);
speed = 50;
distance = int(hyp/speed);
movex = distx/distance;
movey = disty/distance;
if (distance<=0) {
gotoAndPlay("go");
} else {
setProperty(this, _x, getProperty(this, _x)-movex);
setProperty(this, _y, getProperty(this, _y)-movey);
distance = distance-1;
}


What this does is make the enemy walk towards "philo" -

then during the frames I have him punching. So basically what I need to know is any ideas you might have to make him harder to kill.

Right now if you go to him and keep pressing one of the hit keys - he dies right away with out fighting back - this is a real ABSTRACT question - I just want to see what people have to say.

Thanks,
Alex
alexanderclark is offline   Reply With Quote
Old 10-06-2004, 08:04 PM   #2
jbum
Senior Member
 
jbum's Avatar
 
Join Date: Feb 2004
Location: Los Angeles
Posts: 2,920
First off, you'll probably get a lot more opinions on this if you post in the games forum.

One thing that might be interesting is to have your computer-controlled guys respond to the current state (or move-number) of the opponent.

In a lot of combat games, there are a number of different moves you can trigger by holding down various keys, or hitting certain keys in sequence. For example, if you hit SHIFT->RIGHT->RIGHT->UP your guy might do a flying kick with a half-twist, or something. Presumeably, each of these special moves corresponds to a number. So you might have a table that looks like this:

PLAYER_ADVANCE = 0
PLAYER_RETREAT = 1
PLAYER_JUMP = 2
PLAYER_JUMP_KICK = 3

etc. etc. - a unique number for each move, a unique animation for each of those moves, and a unique way of triggering the move.

Now this is all for the guy the player is controlling. So the idea is to make the computer do different things based on what the player is doing.

So basically, you want to give the computer a counter-state which reacts to the player's state, depending on the proximity to the player.

OPP_ADVANCE = 0;
OPP_RETREAT = 1;
OPP_KICK = 2;
OPP_GETKICKED = 3;
OPP_AVOIDKICK = 4;
etc.

So you might end up with something like:

code:

if (player.mode == PLAYER_ADVANCE) {
if (closeToPlayer())
myMode = OPP_RETREAT;
else
myMode = OPP_ADVANCE;
// maybe randomly switch modes here...
}
else if (player.mode == PLAYER_RETREAT) {
myMode = OPP_ADVANCE;
}
else if (player.mode == PLAYER_KICK) {
if (inPositionForKick()) {
myMode = OPP_GETKICKED;
}
else {
myMode = OPP_AVOIDKICK;
}
}
// etc etc...



Something else that is worth discussing here is timing. You can't be constantly changing your mode (e.g. you don't want to do this from an onEnterFrame handler) because many of these modes should trigger animations that have a fixed playback. For example, if you are in the middle of a kick, you can't suddenly, in mid-air switch to retreating. You would want to make these decisions of which mode to switch to when the animation from the previous mode is finished. At the end of each animated sequence, you might want to call a routine "selectState" that triggers the next mode, and looks something like the above code.

Also, timing is probably critical for determining whether the player landed one on you or not. If you are are close to the end of an animation, than you might have sufficient time to react to the player, but if you are in the middle of something, and the player has a good counter-move, than the player should probably manage to score on you.

Some of your modes (and their animations) will need multiple outcomes. A kick might end up you landing on your feet OR a kick might end up with you getting flipped by your opponent. One way to accomplish this is to divide full-moves up into sub-moves.

OPP_KICKSTART = 0
OPP_KICKEND_SUCCESS = 1
OPP_KICKEND_FLIP = 2

etc.

Needless to say, making a good opponent AI is going to be a LOT of work.

Enjoy!
__________________

Last edited by jbum; 10-06-2004 at 09:01 PM.
jbum is offline   Reply With Quote
Old 04-06-2007, 11:29 PM   #3
petra036
Flash Guru
 
Join Date: Apr 2007
Location: Wellington << New Zealand
Posts: 9
Brilliant Advice

Good lord, well done on your brilliant advice. This is amazing how you gave the intructions so cleary, I couldn't have said it better myself.

And yes, I do take notice of the dates on posts
petra036 is offline   Reply With Quote
Reply

Go Back   Flash Kit Community Forums > Flash Help > Flash ActionScript

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 11:17 PM.


internet.commerce
Be a Commerce Partner
 »  »  »  »  »  »  »
 »  »  »  »  »  »
 

    

Acceptable Use Policy

internet.comMediabistrojusttechjobs.comGraphics.com

WebMediaBrands Corporate Info


Advertise | Newsletters | Feedback | Submit News

Legal Notices | Licensing | Permissions | Privacy Policy


Powered by vBulletin® Version 3.8.1
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.